Проблемы с регулярным выражением и именованной ссылкой в ​​Python - PullRequest
1 голос
/ 02 апреля 2020

У меня есть следующая строка

"1     Compensation for the month Jan,2020                 10                 160                       1600"

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

'Индекс': 1 'Описание': 'Компенсация за месяц январь 2020' 'HourlyRate': '10' 'TotalHours': '160' 'Итого ':' 1600 '

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

(?P<Index>\w+)\s+(?P<Description>\w+)\s+(?P<HourlyRate>.+)\s+(?P<TotalHours>.+)\s+(?P<Total>)

Есть идеи, как это сделать sh?

Большое спасибо за вашу помощь.

1 Ответ

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

Вы можете использовать тот факт, что первое и последнее три поля являются числовыми полями, поэтому во втором поле вы можете сопоставить любое количество любых символов:

^(?P<Index>\d+)\s+(?P<Description>.*?)\s+(?P<HourlyRate>\d+)\s+(?P<TotalHours>\d+)\s+(?P<Total>\d+)$

См. Регулярное выражение демо . Если числа могут иметь дробные части, замените этот шаблон \d+ на \d+(?:\.\d+)? (или \d+(?:,\d+)?, если в качестве десятичного разделителя используется запятая).

Подробности

  • ^ - начало строки
  • (?P<Index>\d+) - 1+ цифр
  • \s+ - 1+ пробелов
  • (?P<Description>.*?) - любая 0+ символов, кроме символов перевода строки, как можно меньше
  • \s+ - 1+ пробелов
  • (?P<HourlyRate>\d+) - 1+ цифр
  • \s+ - 1 + пробелы
  • (?P<TotalHours>\d+) - 1+ цифр
  • \s+ - 1+ пробелов
  • (?P<Total>\d+) - 1+ цифр
  • $ - конец строки.
...