我有以下字符串:
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日”?
谢谢!
答案 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
我在正则表达式的开头添加了.*
,这样它的贪婪性就会“吃掉”所有直到最后并回溯以获得最后一场比赛。
并将您想要的部分放入捕获组(同时将非捕获组中的月份转换为。)
此外,你可能会在几个月内使用这样的东西:
(?:(?: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'