RegEx匹配包含子字符串的字符串,同时排除包含该子字符串的其他单词



我正在尝试匹配某些日志条目,其中包括部分字符串"数字">排除其他也包含字符串"Number">的日志条目.

someNumber = 12345
anotherNumber = 45678
thirdNumber = 010101
otherNumber = 99999
& lt; someNumber> 12345
& lt; anotherNumber> 45678
& lt; thirdNumber> 010101
& lt; otherNumber> 99999

我需要匹配包含字符串"Number">的所有条目而只排除了其中的一部分。所以,所有出现的"thirdNumber">"otherNumber"(无论后面跟着b =或>)需要匹配。而"someNumber">"anotherNumber">需要从匹配中排除

注意,一些日志条目包含一个等号(someNumber=12345),而其他条目则被XML标记包围(12345)

此外,有时需要排除部分匹配(即子字符串"other"在日志条目"和其他中数量="。

我在尝试什么:(? !。* ( bsomeNumber | banotherNumber))(数量)

似乎不适合我。谢谢你的帮助。

假设这个要求不是特别重要:

注意,一些日志条目包含等号(someNumber=12345),而其他条目则由XML标记(12345)包围

如何:

b(?!(?:some|another))w+Number

演示

一个选项可能是

<?b(?!someNumber|anotherNumber)bw+Number[=>]d+

模式匹配:

  • <?匹配可选<
  • b(?!someNumber|anotherNumber)b一个词边界,断言没有任何或2个词直接向右使用负向前看
  • w+Number匹配1+单词字符后跟Number
  • [=>]d+匹配=>和1+数字

Regex演示


如果支持条件,您可以使模式更严格一些,当有打开<时匹配关闭>,否则匹配=

(<)?b(?!someNumber|anotherNumber)bw+Number(?(1)>|=)d+

Regex演示

对黑名单使用否定的展望:

b(?!(someNumber|otherNumber)b)w+Numberb

查看现场演示

请注意,反向查找需要正确地包含表达式的词边界match边缘情况someNumberNumber等。

最新更新