某些文本中日期的python正则表达式,由两个关键字括起来

时间:2010-05-05 02:27:16

标签: python regex

这是question的第2部分,非常感谢David的answer。如果我需要提取由两个关键字限定的日期怎么办?

示例:

text = "One 09 Jun 2011 Two 10 Dec 2012 Three 15 Jan 2015 End"

Case 1 bounding keyboards: "One" and "Three"
Result expected: ['09 Jun 2011', '10 Dec 2012']

Case 2 bounding keyboards: "Two" and "End"
Result expected: ['10 Dec 2012', '15 Jan 2015']

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用两个正则表达式执行此操作。一个正则表达式获取两个关键字之间的文本。另一个正则表达式提取日期。

match = re.search(r"\bOne\b(.*?)\bThree\b", text, re.DOTALL)
if match:
    betweenwords = match.group(1)
    dates = re.findall(r'\d\d (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4}', betweenwords) 

答案 1 :(得分:0)

您真的需要担心关键字吗?你能确保关键字不会改变吗?

如果没有,前一个问题的完全相同的解决方案可以解决这个问题:

>>> import re
>>> text = "One 09 Jun 2011 Two 10 Dec 2012 Three 15 Jan 2015 End"
>>> match = re.findall(r'\d\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}', text)
>>> match
['09 Jun 2011', '10 Dec 2012', '15 Jan 2015']

如果你真的只需要两个日期,你可以使用列表切片:

>>> match[:2]
['09 Jun 2011', '10 Dec 2012']
>>> match[1:]
['10 Dec 2012', '15 Jan 2015']