避免提取具有特定术语的单词
Avoid extracting a word with a specific term
我的计划是使用正则表达式从字符串中提取词组。但是,我有时会在应该提取的单词前面加上 NOT
这个单词。不确定如何处理该问题。
测试字符串:
tag=os index=linux index=windows NOT index=mac tag=db index="a_something-else" NOT index=solaris
当前(失败)正则表达式:
index=(\")?(?<my_indexes>\w+(-)?(\w+)?)(\")?
此正则表达式正在提取所有 index=zyx
个单词。但是 NOT
的情况例如NOT index=mac
或 NOT index=solaris
应该避免。例如。结果应该是这样的:
index=linux
index=windows
index="a_something-else"
有什么建议吗?
如您所指,它是 PCRE,一种选择是使用 SKIP FAIL 模式,并使用带有反向引用的捕获组来配对匹配的双引号。
然后你可以在捕获组中使双引号可选,并使用 </code> 和 <code>
引用它
请注意,您不必自行转义双引号。
\bNOT\h+index=("?)\w+(?:-\w+)*(*SKIP)(*FAIL)|index=("?)\w+(?:-\w+)*
说明
\bNOT\h+
匹配 NOT 和 1+ 个水平空白字符
index=("?)
匹配 index=
并在 组 1 中捕获一个可选的 "
\w+(?:-\w+)*
匹配 1+ 个单词字符,可选择由 -
和 1+ 个单词字符重复。然后反向引用组 1 中捕获的内容
(*SKIP)(*FAIL)|
跳过比赛
index=("?)
匹配 index=
并在 组 2 中捕获一个可选的 "
\w+(?:-\w+)*
与上面的模式相同,现在反向引用组 2
如果您不想要 a_something-else
周围的双引号并且只想要 =
之后的值,您可以使用另一个捕获组,或者使用命名的捕获组 my_indexes
\bNOT\h+index=("?)\w+(?:-\w+)*(*SKIP)(*FAIL)|index=("?)(?<my_indexes>\w+(?:-\w+)*)
我的计划是使用正则表达式从字符串中提取词组。但是,我有时会在应该提取的单词前面加上 NOT
这个单词。不确定如何处理该问题。
测试字符串:
tag=os index=linux index=windows NOT index=mac tag=db index="a_something-else" NOT index=solaris
当前(失败)正则表达式:
index=(\")?(?<my_indexes>\w+(-)?(\w+)?)(\")?
此正则表达式正在提取所有 index=zyx
个单词。但是 NOT
的情况例如NOT index=mac
或 NOT index=solaris
应该避免。例如。结果应该是这样的:
index=linux
index=windows
index="a_something-else"
有什么建议吗?
如您所指,它是 PCRE,一种选择是使用 SKIP FAIL 模式,并使用带有反向引用的捕获组来配对匹配的双引号。
然后你可以在捕获组中使双引号可选,并使用 </code> 和 <code>
请注意,您不必自行转义双引号。
\bNOT\h+index=("?)\w+(?:-\w+)*(*SKIP)(*FAIL)|index=("?)\w+(?:-\w+)*
说明
\bNOT\h+
匹配 NOT 和 1+ 个水平空白字符index=("?)
匹配index=
并在 组 1 中捕获一个可选的 \w+(?:-\w+)*
匹配 1+ 个单词字符,可选择由-
和 1+ 个单词字符重复。然后反向引用组 1 中捕获的内容
(*SKIP)(*FAIL)|
跳过比赛index=("?)
匹配index=
并在 组 2 中捕获一个可选的 \w+(?:-\w+)*
与上面的模式相同,现在反向引用组 2
"
"
如果您不想要 a_something-else
周围的双引号并且只想要 =
之后的值,您可以使用另一个捕获组,或者使用命名的捕获组 my_indexes
\bNOT\h+index=("?)\w+(?:-\w+)*(*SKIP)(*FAIL)|index=("?)(?<my_indexes>\w+(?:-\w+)*)