使用正则表达式匹配字符串的左侧和右侧
Matching the left and rights side side of a string using a regex
在任何正则表达式语言中(尽管首选 PCRE)是否有办法否定匹配中间的一部分字符串?我已经查看了 negative/positive lookahead/behind 并且它们似乎能够匹配左侧或右侧但不能同时匹配两者(可能我误解了什么)。
一些示例输入:
a "b" c
d "e" f
预期匹配:
a c
d f
左边或右边的字符串可以是任何 character/symbol,我基本上想丢弃 ""
内的任何内容,包括引号本身。
为了使这个更具体,我正在尝试解析我们在 Splunk 中的一些错误日志,其中 Kubernetes pods 的名称包含在 ""
中。删除唯一的 pod 名称将使我能够列出影响我尝试分类的系统的错误消息。
在 Splunk 中,您可以像这样使用组:
...
| rex "(?<left>.*?)\"[^\"]*\"(?<right>.*)" ```captures only the left and right parts```
| eval pod=left+right ```concatenates left and right which essentially deletes the quoted part```
| table pod ```a table of results, just for illustration```
您也可以使用 sed
。
...
| rex mode=sed "s/([^\\"]+) \\"[^\\"]+\\" (.*)/ /"
在任何正则表达式语言中(尽管首选 PCRE)是否有办法否定匹配中间的一部分字符串?我已经查看了 negative/positive lookahead/behind 并且它们似乎能够匹配左侧或右侧但不能同时匹配两者(可能我误解了什么)。
一些示例输入:
a "b" c
d "e" f
预期匹配:
a c
d f
左边或右边的字符串可以是任何 character/symbol,我基本上想丢弃 ""
内的任何内容,包括引号本身。
为了使这个更具体,我正在尝试解析我们在 Splunk 中的一些错误日志,其中 Kubernetes pods 的名称包含在 ""
中。删除唯一的 pod 名称将使我能够列出影响我尝试分类的系统的错误消息。
在 Splunk 中,您可以像这样使用组:
...
| rex "(?<left>.*?)\"[^\"]*\"(?<right>.*)" ```captures only the left and right parts```
| eval pod=left+right ```concatenates left and right which essentially deletes the quoted part```
| table pod ```a table of results, just for illustration```
您也可以使用 sed
。
...
| rex mode=sed "s/([^\\"]+) \\"[^\\"]+\\" (.*)/ /"