Проблема с именованным регулярным выражением в Python - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю над проектом, в котором мне нужно разбить строку ниже на несколько групп. Я использую именованное регулярное выражение для разделения на 3 группы:

  1. InvoiceNumber
  2. Описание
  3. InvoiceAmount
671217            John Doe v Monica Geller, et al.            $55.50
                Pertains To: Joey Tribuiani                                                                               
                Firm's File # ABCDEF-123
                Claim No# 1237474

Я использую следующее регулярное выражение:

search = '(?P<InvoiceNumber>\d+)\s+(?P<Description>.*?)\s+(?P<InvoiceAmount>.*?)\s+'

Любая идея, как это сделать. Большое спасибо за вашу помощь.

1 Ответ

1 голос
/ 08 апреля 2020

Вы можете использовать

(?P<InvoiceNumber>\d+)\s+.*?(?P<InvoiceAmount>\$\d+(?:\.\d+)?)\s+(?P<Description>\S[\S\s]*)

Это будет соответствовать

  • (?P<InvoiceNumber> Именованная группа InvoiceNumber
    • \d+ Матч 1 + цифры
  • ) Закрыть группу
  • \s+.*? Совпадение 1+ пробельных символов, затем любой символ, кроме пробельного символа, не жадный
  • (?P<InvoiceAmount> Именованная группа Счет-фактура
    • \$\d+(?:\.\d+)? Сопоставить сумму счета с необязательной десятичной частью
  • ) Закрыть группу
  • \s+ Совпадение 1+ пробельных символов
  • (?P<Description> Именованная группа Описание
    • \S[\S\s]* Сопоставьте непробельный символ так, чтобы было хотя бы описание и все последующие символы
  • ) Закрыть группу

Regex demo

...