【发布时间】:2019-09-06 07:17:21
【问题描述】:
我有下面两行作为输出
1 ID_1 INSV enabled Activated 12.345.67.89
2 ID_2 SYSB Disabled Activated 12.345.67.89
我想匹配不应该有 SYSB 但应该已经激活的行。我正在写下面的正则表达式
ID_\d+\s+(?!SYSB)\s+\w+\s+Activated
它忽略了 SYSB 行,但它也没有捕获 INSV 行。如何解决这个正则表达式?
【问题讨论】:
-
你可以使用
^(?!.* SYSB ).* Activated\b -
检查每一行并使用
in、and、not运算符不是更容易吗? -
编译的正则表达式的性能应该更好,具体取决于行数。
-
虽然@anubhava 回答有效,但我想直接回答您的问题。您的正则表达式不匹配,因为它没有任何与单词匹配的东西来代替 SYSB。更正后的版本可能是:
ID_\d+\s+(?!SYSB)\w*\s+\w+\s+Activated在您的示例中添加 \w* 以匹配INSV。
标签: python regex regex-lookarounds regex-negation