从捕获组中提取术语
extract terms from a capture group
我遇到了一个我无法解决的难题,所以我在这里问一下。
我正在解析来自 SIEM 的日志,我想从中提取一些术语。
日志格式严格,但内容因行而异。
有些日志会包含一个用双引号分隔的句子,例如。 “... ... ...”,同一位置的其他一些(因此在同一捕获组中捕获)将仅包含 - (ascii 45)
我编写了以下正则表达式 (pcre):
\s(?P<cap1>\".+\"|\-)\s
但我想捕获“-”符号以及句子中双引号之间的其他字符。
有办法吗?就像是
\s(\"?P<cap1>(.+)\"|?P<cap1>\-)\s
(我知道这是行不通的)
感谢您的帮助!
您可以使用 branch reset group、(?|...|...)
来匹配各种模式,但始终捕获到同一组:
(?|\"(?<cap>[^\"]*)\"|(?<cap>-+))
详情
(?|
- 分支重置组开始
\"
- 一个"
(?<cap>[^\"]*)
- 组 "cap":除 "
之外的任何 0+ 个字符
\"
- 一个"
|
- 或
(?<cap>-+)
- 组 "cap":1+ -
个字符
)
- 分支重置组结束。
我遇到了一个我无法解决的难题,所以我在这里问一下。
我正在解析来自 SIEM 的日志,我想从中提取一些术语。
日志格式严格,但内容因行而异。 有些日志会包含一个用双引号分隔的句子,例如。 “... ... ...”,同一位置的其他一些(因此在同一捕获组中捕获)将仅包含 - (ascii 45)
我编写了以下正则表达式 (pcre):
\s(?P<cap1>\".+\"|\-)\s
但我想捕获“-”符号以及句子中双引号之间的其他字符。
有办法吗?就像是
\s(\"?P<cap1>(.+)\"|?P<cap1>\-)\s
(我知道这是行不通的)
感谢您的帮助!
您可以使用 branch reset group、(?|...|...)
来匹配各种模式,但始终捕获到同一组:
(?|\"(?<cap>[^\"]*)\"|(?<cap>-+))
详情
(?|
- 分支重置组开始\"
- 一个"
(?<cap>[^\"]*)
- 组 "cap":除"
之外的任何 0+ 个字符
\"
- 一个"
|
- 或(?<cap>-+)
- 组 "cap":1+-
个字符
)
- 分支重置组结束。