正则表达式:在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
)或匹配的字符类。所以,只有一个字符列在方括号内。哦,所以去掉方括号?