使用正则表达式匹配字符串的左侧和右侧

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/([^\\"]+) \\"[^\\"]+\\" (.*)/ /"