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

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

The Liz Copeland

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

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

The Liz Copeland

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

No. stay song () listened comment

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

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

header = re.compile(r'\t\w+.\t.+')

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

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

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

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

Code Maniac 10.04.2019 06:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Демо:

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

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

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

Allan 10.04.2019 15:33

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

.*?\bLiz Copeland\b.*\t{5}

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

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

\tNo\.\tArtist\tSong\tAlbum \(Label\)\tComment\b

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

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

Regex отлично работает для заголовка. Регулярное выражение для заголовка должно соответствовать только «No. Artist Song Album (Label) Comment», оно также соответствует другим строкам.

anonymous13 10.04.2019 15:27

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

The fourth bird 10.04.2019 15:29

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

anonymous13 10.04.2019 15:59

Другие вопросы по теме