来自先前指定的列表的正则表达式

时间:2016-01-27 20:24:11

标签: python regex python-3.x

我正在尝试以下方法:从每篇文章中仅打印出位于第4行或第5行的月份。我试图这样做的方式是:

m = 'January', 'February', 'March', 'April', 'May' 'June', 'July', 'August', 'September', 'October', 'Novemeber', 'December'

for i in range(len(sections)):

        date = re.search(r"[m]",sections[i][1:5])

        print(date)

第一个问题。我不知道如何在列表“m”中搜索正则表达式。第二个问题,我想把我的搜索只集中在每篇文章的第0-5行。

2 个答案:

答案 0 :(得分:2)

假设:

>>> txt='''\
... Line 1
... Line 2
... Line 3
... Line 4
... Line 5 April'''

您可以使用i获取j.splitlines()[i:j]行:

>>> txt.splitlines()[0:3]
['Line 1', 'Line 2', 'Line 3']

现在只需构建一个找到月份的模式。请务必使用\b查找完整的字词匹配:

>>> months=['January', 'February', 'March', 'April', 'May' 'June', 'July', 'August', 'September', 'October', 'Novemeber', 'December']
>>> pat=re.compile("|".join([r"\b{}\b".format(m) for m in months]), re.M)

然后在目标线切片中搜索您的图案:

>>> pat.search("\n".join(txt.splitlines()[0:5]))
<_sre.SRE_Match object at 0x107a2a9f0>

如果要捕获它出现的行,您可能会执行THIS

之类的操作

答案 1 :(得分:1)

这取决于哪些部分,我认为它是一个多行字符串:

import re

sections = 'some sections here'
dates = re.findall('\\b'+'\\b|\\b'.join(m), ' '.join(sections.splitlines()[0:4]))