Функция регулярных выражений для выполнения каждой строки в файле и извлечения целой строки с определенным словом

#python #regex

#python #регулярное выражение

Вопрос:

Я работаю над кодом регулярных выражений на python для поиска шаблона регулярных выражений в каждой строке файла и извлечения требуемых шаблонов Несколько строк файла выглядят так

 The Liz Copeland
  

Понедельник, 1 апреля 2018 г.
Нет. песня stay () прослушанный комментарий

Я хочу извлечь заголовок и заголовок из файла — в каждом заголовке есть Лиз Коупленд в строке, а строка заканчивается 5 вкладками, и вывод должен отображаться, как показано ниже

 The Liz Copeland
  

-Каждый заголовок имеет вкладку, за которой следуют заголовки столбцов, разделенные 5 вкладками, и вывод выглядит следующим образом

Нет. прослушанный комментарий stay song ()

Я написал функцию для извлечения строк регулярных выражений

 title = re.compile(r'([^.?!]*[.?s!]Liz Copeland [^.?!]*[.?s!])t')

header = re.compile(r'tw .t. ')

with open(file) as f:
    for line in f:
        m_show = re.match(title, line)
        m_header = re.match(header, line)
  

Приведенный выше код не выводит все строки с соответствующими шаблонами и дает мне нежелательные результаты

Пожалуйста, помогите мне с кодом. Заранее благодарю вас

Комментарии:

1. Вы можете попробовать что-то вроде этого

Ответ №1:

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

 .*?Liz Copeland. ?(d{1,2}[ap]m-d{1,2}[ap]m)s $
  

ДЕМОНСТРАЦИЯ:

https://regex101.com/r/BjTrgU/1/

Он соответствует всей строке, где присутствует Лиз Коупленд, с конечными пробелами

Комментарии:

1. anonymous13: не могли бы вы отметить ответы как правильные и проголосовать? Спасибо

Ответ №2:

Чтобы получить заголовок, вы можете сопоставить имя Liz Copeland между границами слов b и сопоставить 5 вкладок в конце строки:

 .*?bLiz Copelandb.*t{5}
  

Демонстрация регулярных выражений

Чтобы соответствовать заголовку, вы могли бы использовать:

 tNo.tArtisttSongtAlbum (Label)tCommentb
  

Демонстрация регулярных выражений

Не то, чтобы в последней строке buy 44661 Laurent Garnier The Man with the Red Face отсутствовало содержимое между круглыми скобками, как в предыдущих в примере данных.

Комментарии:

1. Регулярное выражение отлично работает для заголовка. Регулярное выражение для заголовка должно соответствовать только «No. Исполнитель Песня Альбом (ярлык) Комментарий», он соответствует и другим строкам

2. @anonymous13 Вы могли бы сопоставить это так regex101.com/r/6poZbH/2 Я обновил ответ.

3. Я попробовал t w .t w t w t w s(w ) t w $ для строки заголовка, и это работает. Спасибо