正则表达式 - 搜索类似的行 - 不同的单词

时间:2016-05-26 14:18:17

标签: regex

有以下几行:

Animated.Value

我希望找到像

这样的所有行
assert json.error1.code == "1"
assert json.error.code  == "2"
assert json.error.code  == "3"
assert json.error1.code  == "4"

其中anyword可以是除错误之外的任何内容 所以在我的例子中,第一行和第四行。

我可以这样做吗?

我试过像

这样的东西
assert json.[anyword].code  == "3"

但是没有用,它匹配所有行,尽管我对错误词放了一个否定。

2 个答案:

答案 0 :(得分:0)

^.*(?!error)\.code.*$正则表达式匹配任何0+个字符,但字符串开头有换行符,然后回溯以查找未跟error个子字符串的字符,然后是.code substring,然后是除了换行符之外的0+个字符,直到字符串/行的末尾。

您可以使用

^(?!.*\.error\.).*\.code\s*==.*$

请参阅regex demo(与您提供的第一行和第四行相匹配)。如果字符串(行)包含(?!.*\.error\.)子字符串,则.error.否定前瞻将使匹配失败。

模式详情

  • ^ - 行/字符串的开头(取决于您是否使用MULTILINE修饰符)
  • (?!.*\.error\.) - 如果字符串/字符串中某处有.error.,则表示匹配失败的否定前瞻 - 也取决于DOTALL修饰符)
  • .* - 任何0+个字符(除了没有DOTALL修饰符的换行符)
  • \.code - 文字.code子字符串
  • \s* - 0+ whitespaces
  • == - 文字==子字符串
  • .* - 任何0+个字符(除了没有DOTALL修饰符的换行符)
  • $ - 字符串/行的结尾(取决于您是否使用MULTILINE修饰符)。

答案 1 :(得分:0)

您可以使用以下正则表达式:

'assert\sjson\.(?:(?!errors).*)\.code\s+==\s+"\d"'

演示:https://regex101.com/r/jG3uK7/5

请注意,您的负面预测并不像预期的那样有效,因为您需要在.*之前使用该负面预测并将它们放在捕获组中。