0

我有以下字符串:

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'

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

谢谢!

4

3 回答 3

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'
于 2013-09-18T16:25:15.533 回答
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

正则表达式101演示

.*在正则表达式的开头添加了 ,以便它的贪婪本性将“吃掉”所有内容并回溯到最后一场比赛。

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

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

(?:(?:Jan|Febr)uary|Ma(?:rch|y)|April|Ju(?:ne|ly)|August|(?:Septem|Octo|Novem|Decem)ber)
于 2013-09-18T16:30:50.803 回答
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'
于 2013-09-18T16:29:23.503 回答