Что нового

[RegExp] Составить шаблон для текста

nicotino

Новичок
Сообщения
30
Репутация
0
Здравствуйте.
Хотел бы попросить помощи у тех кто хорошо разбирается в регулярных выражениях.

Попробую описать проблему:
Есть некий текст,например:

мы долго едем на машине домой -- надо составить шаблон типа :
(мы - постоянный текст)
(долго едем - может меняться на любое количество слов с пробелами)
(слово на машине может меняться типа тракторе но окончание 'е' всегда остается постоянным и так же это слово может быть исключено из текста,например:"мы долго едем домой")
(домой - любое слово но только одно в конце строки).

Спасибо тем кто сможет мне помочь. :smile:
 

xaker

Знающий
Сообщения
52
Репутация
16
пока так:
Код:
#Include <Array.au3>

$a = _func1('мы долго едем домой')
_ArrayDisplay( $a )

$a = _func1('мы долго едем на машине домой')
_ArrayDisplay( $a )

Func _func1($sText)
	Local $array = StringRegExp($sText, '(мы) (.+) (.*? .*е) (.+)', 3)
	If @error <> 0 Then $array = StringRegExp($sText, '(мы) (.+) (.+)', 3)
	Return $array
EndFunc
 

valldar

Новичок
Сообщения
32
Репутация
2
У меня аналогичная проблема.
Вот этот код возвращает ответ в виде массива
Код:
StringRegExp($sText, '(мы) (.+) (.*? .*е) (.+)', 3)

А как сделать, чтобы все слова записались в одну строку?

У меня имеется следующие строки
Код:
$string='Задание: Выполняется (1880) <a title="7:15:00">[87 циклов]</a>
'
$task=StringRegExp($string, '(?si)(Задание: .*?)(?:<a.*?">)?(\[[0-9]+? циклов\])?
',3)


На выходе мне нужна строка: 'Задание: Выполняется (1880) [87 циклов]', а получается массив, содержащий две строки
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
valldar [?]
На выходе мне нужна строка: 'Задание: Выполняется (1880) [87 циклов]', а получается массив, содержащий две строки
Код:
$string = 'Задание: Выполняется (1880) <a title="7:15:00">[87 циклов]</a>
'
$task = StringRegExpReplace($string, '(\<.*?\>)', '')

ConsoleWrite($task&@LF)
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Вариант от valldar красив, но скорее всего текст не ограничивается этой строкой и вряд ли приемлем.
Вариант:
Код:
$sText ='Some Text' & 'Задание: Выполняется (1880) <a title="7:15:00">[87 циклов]</a>
' & @CRLF & 'Some Text'

$sPatern = '(?si).*(Задание: .*?\))\h*<a.*?">(\[\d+\h*циклов\])\h*</a>
.*'
$sResult = StringRegExpReplace( $sText, $sPatern, '\1\2' )
;$sResult =StringRegExpReplace($sText, '(\<.*?\>)', '')
MsgBox(4096, ' Test Result', $sResult)
 

valldar

Новичок
Сообщения
32
Репутация
2
Спасибо за ответы :smile:
Ни разу не пользовался функцией StringRegExpReplace, все всегда делал через StringRegExp. Надо восполнить этот пробел :scratch:
 
Верх