Python Regex:从字符串中提取最新日期

时间:2013-09-18 16:22:45

标签: python regex date

我有以下字符串:

text = '3 Day Pass Tickets (September 27 - September 29 - 21+ Event)'

我的最终目标是使用正则表达式提取最新日期(9月29日)。这只是一个例子,但在所有情况下,最新的日期将永远是最后的。使用以下表达式

eventdate = re.search(r'(January|February|March|April|May|June|July|August|September|October|November|December) \d\d?', text)

结果

eventdate.group() = 'September 27'

如何更改正则表达式以仅捕获“9月29日”?

谢谢!

3 个答案:

答案 0 :(得分:4)

改为使用re.findall,并检索最后匹配的字符串。

>>> pattern = r'((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?)'
>>> re.findall(pattern, text)[-1]
'September 29'

答案 1 :(得分:1)

您可以像这样使用re.search

>>> result = re.search(r'.*((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?)', text)
>>> print(result.group(1))
September 29

regex101 demo

我在正则表达式的开头添加了.*,这样它的贪婪性就会“吃掉”所有直到最后并回溯以获得最后一场比赛。

并将您想要的部分放入捕获组(同时将非捕获组中的月份转换为。)

此外,你可能会在几个月内使用这样的东西:

(?:(?:Jan|Febr)uary|Ma(?:rch|y)|April|Ju(?:ne|ly)|August|(?:Septem|Octo|Novem|Decem)ber)

答案 2 :(得分:0)

如果你的字符串总是这样,除了使用re.findall之外,你还可以这样做:

eventdate = re.search(r'(.* - January|February|March|April|May|June|July|August|September|October|November|December) \d\d?', text)
eventdate.group()

这导致:

'September 27'