У меня есть исходящие электронные письма, похожие на:

Dear XYZ,

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

CASE ID: 123654

Best Regards,
XYZ

Текст мог состоять из одного или двух абзацев. Я хочу сделать два регулярных выражения. Один должен дать мне текст в параграфах, а другой должен дать мне номер, который является CASE ID. Результат должен выглядеть так:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.


123654

Мне удалось создать RegEx, чтобы получить регистр с помощью (CASE ID\s*[:]+\s*(\w*)\s*), но мне не удалось извлечь абзац. Любая помощь будет высоко ценится.

3
Azee. 21 Ноя 2017 в 22:05

1 ответ

Лучший ответ

В основном вы можете или должны вместо этого использовать одно регулярное выражение, которое будет доставлять группы совпадений.

Практически на любом другом языке это будет выглядеть так (с использованием флага «gs» для игнорирования новой строки):

(.+?)CASE ID: (\d+)

Но для vbscript это примерно так:

(.*?[^\$]*)CASE ID: (\d+)

Также вам нужно иметь дело с такими группами матчей:

Dim RegEx : Set RegEx = New RegExp
RegEx.Pattern = "(.*?[^\$]*)CASE ID: (\d+)"
RegEx.Global  = True
RegEx.MultiLine = True
Dim strTemp : strTemp = "Lorem ipsum " & VbCrLf & "Cannot be translated to english " & VbCrLf & "CASE ID: 153" 
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(0)
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(1)

Дело в том, что это будет работать только в том случае, если в сообщении содержится постоянная строка «CASE ID:». Если строка отсутствует, например перевод строки после ":" не сработает

1
Harry 21 Ноя 2017 в 21:26