将多个正则表达式组合为一个

时间:2019-01-22 12:31:35

标签: python regex

我有这个变量:

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.

并且我想在应用程序名称和源之后获取字符串,我对正则表达式不好,所以我创建了两个单独的表达式:

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) 

如何将这两个合二为一,并且我需要单独的正则表达式来在Message之后返回字符串

所需的输出

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

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

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

说明:您需要使用正向前行(?=,以便它不会消耗“源”字符,否则第二种选择就无法检测到它,甚至在设计上也与“时间戳”相同如果在这里真的没有关系。 (?:用于形成未捕获的正则表达式组。

要添加消息,我假设您要捕获直到输入结束:

(?:Application name:\s*(.+?)\s+(?=Source))|(?:Source:\s*(.+?)\s+(?=Timestamp:))|(?:Message:\s*([\s\S]*)$)