我想写一个正则表达式,这样我就可以匹配这个模式
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
不在我的单词列表中。
您使用的是字符类,而不是交替类,您应该使用:
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的正则表达式引擎将从左到右扫描上述交替。我们将较长的术语,例如年
,首先放在年
之前,这样我们将尝试首先匹配前者,并且仅在无法找到前者的情况下考虑后者。