Как извлечь заголовки в текстовом файле с помощью регулярных выражений в python? - PullRequest
1 голос
/ 04 февраля 2020

Я всегда использовал stackoverflow для решения многих своих проблем путем поиска в потоках. Сегодня я хотел бы получить руководство по созданию шаблона регулярных выражений для моих текстовых файлов. Мои файлы имеют разные заголовки и не соответствуют одному и тому же шаблону именования. Шаблон, которому они следуют, выглядит следующим образом:

2.0 DESCRIPTION
3.0 PLACE OF PERFORMANCE
5.0 SERVICES RETAINED
6.0        STRUCTURE AND ROLES
etc....

Он всегда следует за цифрой, затем заглавными буквами или числом, а затем пробелами, а затем заглавными буквами. Вывод мне нужен список:

output = ['2.0 DESCRIPTION','3.0 PLACE OF PERFORMANCE','5.0 SERVICES RETAINED','6.0        STRUCTURE AND ROLES']

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

import re

text = f'''2.0 DESCRIPTION 
some text here

3.0 SERVICES
som text

5.0 SERVICES RETAINED
some text

6.0        STRUCTURE AND ROLES
sometext'''

pattern = r"\d\s[A-Z][A-Z]+"
matches = re.findall(pattern,text)

Но он вернул:

['0 DESCRIPTION', '0 SERVICES', '0 SERVICES']

Не тот вывод, который я искал. Ваше руководство в поиске шаблона будет очень ценным.

Приветствия, Абхишек

1 Ответ

1 голос
/ 04 февраля 2020

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

matches = re.findall(r'^\d+(?:\.\d+)* *[A-Z][A-Z ]*$',text, re.M)

См. Демоверсию regex .

Здесь,

  • ^ - начало строка (re.M переопределяет поведение ^, чтобы включить и эти позиции)
  • \d+(?:\.\d+)* - 1+ цифр и затем 0+ последовательностей . и 1+ цифр
  • * - ноль или более пробелов
  • [A-Z][A-Z ]* - заглавная буква, а затем 0 или более заглавных букв или пробелов
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...