提问者:小点点

正则表达式:在Python中,如果单词可以相互包含,我如何匹配许多单词中的一个[重复]


我想写一个正则表达式,这样我就可以匹配这个模式

INTEGER YR INTEGER MTH

其中整数为\d,YR为“y”、“YR”、“yrs”、“year”中的一个,MTH为“m”、“MTH”、“MTH”、“月”、“月”中的一个。

所以我试着匹配第一年,所以我写了这个

YEAR_STRING = "[(y)|(yr)|(yrs)|(year)|(years)]"

m = re.search(f'\d+ {YEAR_STRING}', '10 year 2 months')

但是,m.group(0)返回“10年”而不是“10年”。我希望它能匹配完整的单词。我的正则表达式有什么错误?

此外,我希望此操作失败,例如“10年2个月”,这不应该匹配任何内容,因为yeard不在我的单词列表中。


共1个答案

匿名用户

您使用的是字符类,而不是交替类,您应该使用:

year_regex = r'\b(?:years|year|yrs|yr|y)\b'
m = re.findall(r'\d+\s+' + year_regex, '10 year 2 months')
print(m)

这张照片是:

['10 year']

您的字符类实际上是在搜索包含在其中的一组单独字符,但是您想要搜索单词。同样重要的是,Python的正则表达式引擎将从左到右扫描上述交替。我们将较长的术语,例如,首先放在之前,这样我们将尝试首先匹配前者,并且仅在无法找到前者的情况下考虑后者。