python中1到5个int值的正则表达式

python中1到5个int值的正则表达式,python,regex,Python,Regex,我只想存储1或2或3或4或5的数字。我正在以[1-5]的身份尝试 matchObj = re.match( '[1-5]', vote, re.M|re.I) 但它也在验证22。这里有什么问题吗?发生这种情况是因为匹配字符串的开头,所以只要它以[1-5]开头,它就可以以任何其他字符结尾(在这种情况下,只需'2')。您需要在正则表达式的末尾添加一个$,以强制它与字符串的结尾匹配: match = re.match('[1-5]$', vote) 或者,您可以使用vote.isdigit()测

我只想存储
1
2
3
4
5
的数字。我正在以
[1-5]
的身份尝试

 matchObj = re.match( '[1-5]', vote, re.M|re.I)
但它也在验证
22
。这里有什么问题吗?

发生这种情况是因为匹配字符串的开头,所以只要它以
[1-5]
开头,它就可以以任何其他字符结尾(在这种情况下,只需
'2'
)。您需要在正则表达式的末尾添加一个
$
,以强制它与字符串的结尾匹配:

match = re.match('[1-5]$', vote)
或者,您可以使用
vote.isdigit()
测试它是否为数字,然后使用
int(vote)
提取数字并测试范围:

is_valid = vote.isdigit() and 1 <= int(vote) <= 5
is\u valid=vote.isdigit()和1发生这种情况是因为匹配字符串的开头,所以只要它以
[1-5]
开头,它就可以以任何其他字符结尾(在本例中,只需
'2'
)。您需要在正则表达式的末尾添加一个
$
,以强制它与字符串的结尾匹配:

match = re.match('[1-5]$', vote)
或者,您可以使用
vote.isdigit()
测试它是否为数字,然后使用
int(vote)
提取数字并测试范围:

is_valid = vote.isdigit() and 1 <= int(vote) <= 5
is\u valid=vote.isdigit()和1尝试

matchObj = re.match( '^[1-5]$', vote, re.M|re.I)
这样,您就可以知道字符串以1到5之间的数字开始(^)和结束($)

希望对您有所帮助

matchObj = re.match( '^[1-5]$', vote, re.M|re.I)
这样,您就可以知道字符串以1到5之间的数字开始(^)和结束($)


如果您只想从一行文本中选择其中一个数字,请尝试
matchObj=re.match('\b[1-5]\b',vote,re.M | re.I)
,希望它对您有所帮助


\b
表示单词边界,因此有2个匹配项,但22个不匹配。

如果您只想从一行文本中选择其中一个数字,请尝试
matchObj=re.match('\b[1-5]\b',vote,re.M | re.I)


\b
表示单词边界,因此2个匹配,但22个不匹配。

错误之处在于您试图用正则表达式匹配一个范围,而不是提取数字并检查
0
;)用正则表达式检查范围是完全正确的。这在
[a-z]
@ryugie中经常发生,它不是一个数字范围;)从文档中:“
re.match(pattern,string,flags=0)
如果字符串开头有零个或多个字符匹配[…]”考虑改用
fullmatch
,或者简单地将其解析为一个整数。错误的是,您试图将一个范围与regex匹配,而不是提取数字并检查
0
;)用正则表达式检查范围是完全正确的。这在
[a-z]
@ryugie中经常发生,它不是一个数字范围;)从文档中:“
re.match(pattern,string,flags=0)
如果字符串开头有零个或多个字符匹配[…]”请考虑改用
fullmatch
,或者简单地将其解析为一个整数,您的意思是字符串结尾的
$
。@pbuck-Heh,我也很确定——修正了。这是一个大脑放屁,我不得不写代码来确认!非常确定你的意思是字符串末尾的
$
。@pbuck-Heh,非常确定我也这么做了——修正了。这是一个大脑放屁,我不得不写代码来确认!