【问题标题】:RegEx match group that don't contain sequence不包含序列的正则表达式匹配组
【发布时间】:2014-01-24 10:12:31
【问题描述】:

我正在尝试编写一个 Python 正则表达式,它只匹配一个不包含特定字符串的组。

考虑以下字符串:

   VOID ALL               $-11.20
   CANCEL                  $-6.00
   -10.00% LP              $-0.25
   LOYALTY CARD            $-2.50

我希望正则表达式匹配并提取 -10.00% LPLOYALTY CARD。如果遇到VOID ALLCANCEL,它将拒绝该字符串。

我有以下正则表达式 (?P<discount_reason>(?!(CANCEL|VOID\sALL)).+) [$|£]?-(?P<discount_value>[0-9]*\.[0-9]{2}),它正确提取了 discount_reason 和 discount_value 组,但很高兴接受 VOID ALLCANCEL

我错过了什么?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    我对您的第一个命名捕获组进行了轻微修改:

    (?P<discount_reason>^(?!.*VOID ALL|.*CANCEL).*)

    演示:http://regex101.com/r/wA5oG9

    【讨论】:

    • 谢谢一百万。有用!你能解释一下它是如何工作的吗?我正试图绕过(?!.*VOID ALL|.*CANCEL)
    • ^ 锚确实使它起作用,但我也确保将.* 放在负前瞻中每个交替字符串的前面。这意味着"anything... then VOID ALL"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多