正则表达式:在Python中,如果多个单词中的一个可以互相包含,那么如何匹配这些单词

正则表达式:在Python中,如果多个单词中的一个可以互相包含,那么如何匹配这些单词,python,regex,Python,Regex,我想写一个正则表达式,这样我就可以匹配这个模式 整数年整数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年”而不

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

整数年整数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 yeard2 mth”,这不应该匹配任何内容,因为
yeard2
不在我的单词列表中。

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

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的正则表达式引擎将从左到右扫描上述变化。首先,在<代码>年份之前,我们放置了较长的术语,例如“代码>年份”,因此我们将尝试匹配前者,而仅在前者无法找到的情况下才考虑后者。

< p>您使用的是字符类,而不是交替使用的:

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的正则表达式引擎将从左到右扫描上述变化。首先,在<代码>年份之前,我们放置了较长的术语,因此我们将尝试与前者匹配,只在前者无法找到的情况下考虑后者。<(y)>(yr)(yr)(年)(年)] /代码>是匹配<代码>的字符类(< /代码>或<代码> y>代码>或<代码>)<代码>或者
|
等等。所以,只有一个字符列在方括号内。哦,那么去掉方括号?
[(y)|(yr)|(yrs)|(year)|(year)|(years)]
是与
,或
y
)或
匹配的字符类。所以,只有一个字符列在方括号内。哦,所以去掉方括号?