一些文本中日期的python正则表达式,包含两个关键字

一些文本中日期的python正则表达式,包含两个关键字,python,regex,Python,Regex,这是本文的第二部分,非常感谢大卫的演讲。如果我需要提取由两个关键字限定的日期,该怎么办 例如: 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" R

这是本文的第二部分,非常感谢大卫的演讲。如果我需要提取由两个关键字限定的日期,该怎么办

例如:

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']

谢谢

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

如果不是,则与上一个问题完全相同的解决方案可以解决此问题:

>>> 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']

可以使用两个正则表达式来实现这一点。一个正则表达式获取两个关键字之间的文本。另一个正则表达式提取日期

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) 

关键字(用户定义的)对于排除不在文档相关部分内的某些日期非常重要。因此关键字将不同,并且长度可变?你必须使用贪婪匹配。仅字母,还是字母数字?这些都是构建你的模式时的重要考虑因素。请把边界关键词考虑成2个不变的字符串。“贺拉斯,你问了两遍你的问题吗?”Lirik,第二个问题又增加了一个条件,所以我最好把这两个分开!除了re.findal(…,text)应该是re.findall(…,在单词之间)顺便问一下,第一个正则表达式中是否需要第一个和最后一个“\b”?我已经更正了
findall
参数。如果您希望您的单词作为整个单词进行匹配,则所有4个
\b
都是必需的。例如,
\bEnd\b
无法匹配
结尾
。如果你不在乎你的两个关键词是完整的还是部分的,那么你可以省略所有4个
\b