регулярное выражение для сопоставления строки перед двоеточием до пробела - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть образец строки из текстового файла. Я хочу найти все слова перед двоеточием до пробела. я написал такой код:

import re
text = 'From: mathew <mathew@mantis.co.uk>\nSubject: Alt.Atheism FAQ: Atheist Resources\n\nArchive- 
name: atheism/resources\nAlt-atheism-archive-name:'
email_data = re.findall("[^\s].*(?=:)", text)
print(email_data)

Вывод:

['From', 'Subject: Alt.Atheism FAQ', 'Archive-name', 'Alt-atheism-archive-name']

Желаемый вывод:

['From', 'Subject', 'FAQ', 'Archive-name', 'Alt-atheism-archive-name']

Код забирает данные до символа новой строки из-за ( .*) используемый. Я хочу ограничить его до пробела, поэтому я поставил [^ \ s], но он не работает. Что я мог сделать вместо этого?

Ответы [ 2 ]

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

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

email_data = re.findall(r"\S[^:\s]+(?=:)", text) 

См. Демо Python и демо regex .

Подробности

  • \S - символ без пробелов
  • [^:\s]+ - 1+ символов, отличных от : и пробелов
  • (?=:) - немедленно справа должен быть символ : (он не используется, не добавляется к значению совпадения).
0 голосов
/ 11 апреля 2020

Используйте флаг re.IGNORECASE с регулярным выражением

\b[a-z-]+(?=:(?:\s|$))

https://regex101.com/r/0UHsbo/1

https://ideone.com/oz91bP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...