2014-01-24 5 views
0

Я пытаюсь написать регулярное выражение Python, которое соответствует группе, только если оно не содержит определенную строку.Группа соответствия RegEx, которая не содержит последовательности

Рассмотрим следующие строки:

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

Я хотел бы регулярное выражение, чтобы соответствовать и извлекать -10.00% LP и LOYALTY CARD. Он отклонит строку, если она встречает VOID ALL или CANCEL.

У меня есть следующее regex (?P<discount_reason>(?!(CANCEL|VOID\sALL)).+) [$|£]?-(?P<discount_value>[0-9]*\.[0-9]{2}), которое правильно извлекает группы discount_reason и discount_value, но с радостью принимает VOID ALL и CANCEL.

Что мне не хватает?

ответ

1

Я сделал небольшое изменение в вашей первой именованной группы захвата:

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

Демо: http://regex101.com/r/wA5oG9

+0

Благодарит миллион. Оно работает! Не могли бы вы объяснить, как это работает? Я пытаюсь оборачивать голову '(?!. * VOID ALL |. * CANCEL)'. – CadentOrange

+0

Это был якорь '^', который действительно запустил его работу, но я также поставил '. *' В переднюю часть каждой строки чередования в отрицательном образе. Это означает «все» ... затем VOID ALL »' –

Смежные вопросы