我试图在字符串中查找日期(或日期)。我觉得这应该是非常简单的,我只是遗漏了一些东西,但不幸的是,我没有那种经历过正则表达式的经历。
我的正则表达式是:
lookup = re.findall("[0123456789]+st|[0123456789]+nd|[0123456789]+rd|[0123456789]+th", userInput, re.IGNORECASE)
for group in lookup:
print(group)
输出" 3rd,5th,21st"理想情况下,分别在第3组,第5区,第21组。但是,如果我没有在每个st,std,rd,th之前放置[0123456789],它最终只能匹配21之类的东西(因为它认为[]只是第一个选项的一部分)
有没有更简单,更好的方法来设置它?
答案 0 :(得分:3)
您需要对后缀进行分组:
lookup = re.findall("[0-9]+(?:st|[nr]d|th)", userInput, flags=re.IGNORECASE)
请参阅regex demo
请注意,如果要使用(?:...)
获得正确的输出,则需要使用非捕获组re.findall
。另外,如果您只想匹配整个"单词",请在模式\b
周围添加r"\b[0-9]+(?:st|[nr]d|th)\b"
字边界。
请参阅Python demo:
import re
rx = r"[0-9]+(?:st|[nr]d|th)"
s = "April, 23rd June 1st May 2nd"
print(re.findall(rx, s, flags=re.I))
# => ['23rd', '1st', '2nd']