我有这个变量:
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.
答案 0 :(得分:1)
您可以使用此正则表达式:
(?:Application name:\s*(.+?)\s+(?=Source))|(?:Source:\s*(.+?)\s+(?=Timestamp:))
说明:您需要使用正向前行(?=
,以便它不会消耗“源”字符,否则第二种选择就无法检测到它,甚至在设计上也与“时间戳”相同如果在这里真的没有关系。 (?:
用于形成未捕获的正则表达式组。
要添加消息,我假设您要捕获直到输入结束:
(?:Application name:\s*(.+?)\s+(?=Source))|(?:Source:\s*(.+?)\s+(?=Timestamp:))|(?:Message:\s*([\s\S]*)$)