Я работаю над кодом регулярного выражения в 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)
Приведенный выше код не подтягивает все строки с соответствующими шаблонами и дает мне нежелательные результаты.
Пожалуйста, помогите мне с кодом. заранее спасибо
Как насчет использования следующего регулярного выражения:
.*?Liz Copeland.+?\(\d{1,2}[ap]m-\d{1,2}[ap]m\)\s+$
Демо:
https://regex101.com/r/BjTrgU/1/
Он соответствует всей строке, в которой присутствует Лиз Коупленд, с конечными пробелами.
аноним13: не могли бы вы отметить ответы как правильные и проголосовать за? Спасибо
Чтобы получить заголовок, вы можете сопоставить имя 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 anonymous13 Вы можете сопоставить это так regex101.com/r/6poZbH/2 Я обновил ответ.
Я пробовал \t\w+.\t\w+\t\w+\t\w+\s(\w+)\t\w+$ для строки заголовка, и это работает. Спасибо
Вы можете попробовать что-то вроде это