Объедините несколько регулярных выражений в одно - PullRequest
0 голосов
/ 22 января 2019

У меня есть эта переменная:

Application name: Clarion.Pricing.Grid.Service^
Source: EC2AMAZ-ITEJKDI
Timestamp: 2019-01-21T03:52:01.798Z
Message: Connection id ""0HLJV4AI9OCV6"", Request id ""0HLJV4AI9OCV6:000000=
08"": An unhandled exception was thrown by the application.

, и я хочу получить строки после имени приложения и источника, я плохо разбираюсь в regex, поэтому я создал 2 отдельных выражения:

regex1=r'Application name:\s*(.+?)\s+Source'
regex2=r'Source:\s*(.+?)\s+Timestamp:'    
a = re.findall(regex1 ,email_body) 
b = re.findall(regex2 ,email_body) 

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

желаемый вывод

Clarion.Pricing.Grid.Service EC2AMAZ-ITEJKDI Connection id ""0HLJV4AI9OCV6"", Request id ""0HLJV4AI9OCV6:000000=
08"": An unhandled exception was thrown by the application.

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать это регулярное выражение:

(?:Application name:\s*(.+?)\s+(?=Source))|(?:Source:\s*(.+?)\s+(?=Timestamp:))

Объяснение: вам нужно использовать положительный прогноз (?=, чтобы он не потреблял символы "Source", иначе он не может быть обнаружен вторым вариантом, то же самое для "Timestamp" по дизайну, даже если он здесь не важно (?: используются для формирования групп регулярных выражений, которые не фиксируются.

Чтобы добавить сообщение, я предполагаю, что вы хотите захватить до конца ввода:

(?:Application name:\s*(.+?)\s+(?=Source))|(?:Source:\s*(.+?)\s+(?=Timestamp:))|(?:Message:\s*([\s\S]*)$)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...