使用双引号组合在正则表达式中捕获数据
Capturing data in regex with a combination of double quotes
首先 - 我做了一些正则表达式(无论如何都不是专家)但这让我很困惑。
正则表达式风格是 pcre (php)
我正在尝试从 Splunk 事件中包含的某些字段中获取值。具体来说,收件箱规则来自交换的事件。
要注意的是,这些值被封装在引号 (") 中。因此,没有值的 "From" 字段看起来类似于:
From="". One with an actual value would look like From=""Smith, John" [SMTP:johnsmith@example.com] or From="Microsoft At Home" or From=""Systems"[[EX:/O=<organization>/OU=******/cn=Recipients/cn=******]".
The事件中的下一个字段是 ExceptFrom=""。
我有一个正则表达式模式:
`(?:\bFrom=(?:")(?:"|(?:))(?P<From_fixed>((.+?))|((.+?)))(?:"))`
这种方法可行,但有很多问题我必须在稍后的过程中过滤掉。此外,当数据看起来像 From="" 时,它会捕获 ExceptFrom="".
的下一个字段
你能帮我找出一个正则表达式,如果有双引号,它会获取内部引号集之间的值,如果有单引号,则获取引号之间的值,而不是 return 一个值,如果只有一组双引号 ("")。
最后一个是可有可无的,因为我稍后可以忽略它,但它会使数据看起来更好。
这些应该在命名组中捕获 From_fixed
这些是我正在处理的数据示例:
- From="" ExceptIfFrom="" HasAttachment="False" - 期望的结果=或""
- From="Upcoming Events" ExceptIfFrom="" - 期望的结果=即将发生的事件
- From=""Smith, John" [SMTP:johnsmith@example.com] - 期望的结果=Smith, John
- From=""Systems"[[EX:/O=/OU=******/cn=Recipients/cn=******]" - 期望的结果=系统
提前致谢!
你可以试试这个正则表达式:
/(?<=From=\"\"?)(?: |[^"]+)/g
它首先回头看,确保开始时有 'From="',然后检查是否有 Space 或带引号的字符串并匹配它们。
如果双引号后有 Space,则 returns 为空匹配,否则 returns 引号之间的值。
编辑:
试试这个,我忘记了“?
”量词:
\b(?:From=""?(?: |([^"]+)))\b
此正则表达式不使用回溯,而是在 Group 1
中得到结果。
它首先将“From="
”与一个或两个引号匹配,然后是 Space 或任何数量的字符(不是引号),在第 1 组中获取引号值。
首先 - 我做了一些正则表达式(无论如何都不是专家)但这让我很困惑。
正则表达式风格是 pcre (php)
我正在尝试从 Splunk 事件中包含的某些字段中获取值。具体来说,收件箱规则来自交换的事件。
要注意的是,这些值被封装在引号 (") 中。因此,没有值的 "From" 字段看起来类似于:
From="". One with an actual value would look like From=""Smith, John" [SMTP:johnsmith@example.com] or From="Microsoft At Home" or From=""Systems"[[EX:/O=<organization>/OU=******/cn=Recipients/cn=******]".
The事件中的下一个字段是 ExceptFrom=""。
我有一个正则表达式模式:
`(?:\bFrom=(?:")(?:"|(?:))(?P<From_fixed>((.+?))|((.+?)))(?:"))`
这种方法可行,但有很多问题我必须在稍后的过程中过滤掉。此外,当数据看起来像 From="" 时,它会捕获 ExceptFrom="".
的下一个字段你能帮我找出一个正则表达式,如果有双引号,它会获取内部引号集之间的值,如果有单引号,则获取引号之间的值,而不是 return 一个值,如果只有一组双引号 ("")。
最后一个是可有可无的,因为我稍后可以忽略它,但它会使数据看起来更好。
这些应该在命名组中捕获 From_fixed 这些是我正在处理的数据示例:
- From="" ExceptIfFrom="" HasAttachment="False" - 期望的结果=或""
- From="Upcoming Events" ExceptIfFrom="" - 期望的结果=即将发生的事件
- From=""Smith, John" [SMTP:johnsmith@example.com] - 期望的结果=Smith, John
- From=""Systems"[[EX:/O=/OU=******/cn=Recipients/cn=******]" - 期望的结果=系统
提前致谢!
你可以试试这个正则表达式:
/(?<=From=\"\"?)(?: |[^"]+)/g
它首先回头看,确保开始时有 'From="',然后检查是否有 Space 或带引号的字符串并匹配它们。 如果双引号后有 Space,则 returns 为空匹配,否则 returns 引号之间的值。 编辑:
试试这个,我忘记了“?
”量词:
\b(?:From=""?(?: |([^"]+)))\b
此正则表达式不使用回溯,而是在 Group 1
中得到结果。
它首先将“From="
”与一个或两个引号匹配,然后是 Space 或任何数量的字符(不是引号),在第 1 组中获取引号值。