【问题标题】:Regex function to run through each line in a file and extract whole line with specific word正则表达式函数遍历文件中的每一行并提取具有特定单词的整行
【发布时间】:2019-04-10 02:39:05
【问题描述】:

我正在使用 python 中的正则表达式代码来搜索文件中的每一行的正则表达式模式并提取所需的模式文件的几行看起来像这样

The Liz Copeland

2018 年 4 月 1 日星期一 号留歌() 听过评论

我想从文件中提取标题和标题 - 每个标题的行中都有 Liz Copeland,行以 5 个制表符结尾,输出应如下所示

The Liz Copeland

-每个标题都有一个制表符,后跟5个制表符分隔的列标题,输出如下

没有。留歌() 听过评论

我写了一个函数来提取正则表达式行

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)

上面的代码并没有拉出所有匹配模式的行,它给了我不想要的结果

请帮我写代码。提前谢谢你

【问题讨论】:

  • 你可以试试this

标签: python regex


【解决方案1】:

如何使用以下正则表达式:

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

演示:

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

它将 Liz Copeland 所在的整行与结尾空格匹配

【讨论】:

  • anonymous13:您能否将答案标记为正确并投票?谢谢
【解决方案2】:

要获得标题,您可以在单词边界 \b 之间匹配名称 Liz Copeland 并匹配字符串末尾的 5 个制表符:

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

Regex demo

为了匹配你可以使用的标题:

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

Regex demo

并不是说最后一行buy 44661 Laurent Garnier The Man with the Red Face 像示例数据中的前面的内容一样错过了括号之间的内容。

【讨论】:

  • 正则表达式完美地适用于标题。标题的正则表达式只能匹配“No. Artist Song Album (Label) Comment”,它也匹配其他行
  • @anonymous13 你可以像这样匹配它regex101.com/r/6poZbH/2我已经更新了答案。
  • 我为标题行尝试了 \t\w+.\t\w+\t\w+\t\w+\s(\w+)\t\w+$ 并且它有效。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多