2014-01-24 54 views
0

我试图编写一个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

我错过了什么?

回答

1

我做了少许修改你的第一个命名的捕获组:

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

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

+0

万分感谢。有用!你能解释它是如何工作的吗?我试图围绕'(?!。* VOID ALL |。* CANCEL)'把头围住。 – CadentOrange

+0

它是真正让它工作的'''锚点,但我也确保''*'在负向视图内的每个交替字符串的前面。它意味着“任何事......然后全无” –

相关问题