Панды и регулярные выражения - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть код ниже в надежде выполнить простое распознавание образов.Я хочу, чтобы он обнаружил все случаи PDP или CDP или PRS или EDP, за которыми следуют (0 или до 3) нецифров, а затем (ровно 6 цифр).Кажется достаточно простым, но pandas продолжает кричать об ошибке ниже.

пример строк данных:

row1 CAPS ACCT # /APR 1-APR 30 18/EDP 443996/SPECIAL PRICING
row2 CAPS /EDP# 320902/UNUSED LABELS


ValueError: Wrong number of items passed 5, placement implies 1

df['USPS_refund_no'] = df['APEX Invoice Description'].str.extract(r'((EDP)|(PDP)|(CDP)|(PRS)\D{,3}\d{6})',expand=True)

Заранее спасибо

1 Ответ

0 голосов
/ 19 сентября 2018

В вашем случае str.extract ожидает одну группу захвата.Чтобы сопоставить альтернативы перед номером, заключите альтернативный список в группу без захвата и захватите весь шаблон с внешней группой захвата:

df['USPS_refund_no'] = df['APEX Invoice Description'].str.extract(r'((?:EDP|PDP|CDP|PRS)\D{0,3}\d{6})',expand=True)

См. Демонстрационную версию regex .

Подробности

  • ( - начало группы захвата (требуется для extract)
  • (?:EDP|PDP|CDP|PRS) - незахват группы, соответствующей любой из альтернатив, перечисленных внутри (обратите внимание, вы также можете написать это как (?:[EPC]DP|PRS)):
    • EDP - EDP
    • | - или
    • PDP - PDP
    • | - или
    • CDP - CDP
    • | - или
    • PRS - PRS
  • \D{0,3} - от 0 до 3 нецифров
  • \d{6} - шесть цифр
  • ) - конец внешней группы захвата.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...