【问题标题】:Negative Regex pattern matching in python [duplicate]python中的负正则表达式模式匹配[重复]
【发布时间】: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
  • 检查每一行并使用inandnot 运算符不是更容易吗?
  • 编译的正则表达式的性能应该更好,具体取决于行数。
  • 虽然@anubhava 回答有效,但我想直接回答您的问题。您的正则表达式不匹配,因为它没有任何与单词匹配的东西来代替 SYSB。更正后的版本可能是:ID_\d+\s+(?!SYSB)\w*\s+\w+\s+Activated 在您的示例中添加 \w* 以匹配 INSV

标签: python regex regex-lookarounds regex-negation


【解决方案1】:

您可以像这样使用负前瞻:

^(?!.* SYSB ).* Activated\b

RegEx Demo

正则表达式详细信息:

  • ^:开始
  • (?!.* SYSB ):如果" SYSB " 出现在该行中的任何位置,则负前瞻使匹配失败
  • .* Activated\b:匹配单词Activated 空格后的任何位置。 \b 用于单词边界。

【讨论】:

    猜你喜欢
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多