如何使用正则表达式python找到XX st / nd / rd / th

时间:2017-10-03 10:14:12

标签: python regex

我试图在字符串中查找日期(或日期)。我觉得这应该是非常简单的,我只是遗漏了一些东西,但不幸的是,我没有那种经历过正则表达式的经历。

我的正则表达式是:

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之类的东西(因为它认为[]只是第一个选项的一部分)

有没有更简单,更好的方法来设置它?

1 个答案:

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