Skip to main content
 首页 » 编程设计

python之如何使用正则表达式 python 定位 XX st/nd/rd/th

2024年08月19日48lhb25

我正在尝试在字符串中查找一个(或多个)日期。我觉得这应该非常简单,我只是遗漏了一些东西,但不幸的是我对正则表达式没有那么丰富的经验。

我的正则表达式是:

lookup = re.findall("[0123456789]+st|[0123456789]+nd|[0123456789]+rd|[0123456789]+th", userInput, re.IGNORECASE) 
for group in lookup: 
   print(group) 

“3rd、5th、21st”的输出理想情况下是单独组中的 3rd、5th、21st。但是,如果我不把 [0123456789] 放在 EACH st、nd、rd、th 之前,它最终只会与 21st 之类的东西正确匹配(因为它认为 [] 只是第一个 | 选项的一部分)

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

请您参考如下方法:

您需要对后缀进行分组:

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