当我尝试使用正则表达式\w{m,n}
匹配字符串长度时,它与长度低于m
的字符串不匹配,正如预期的那样,但匹配长度超过n
的字符串。< / p>
>>> expression = '\w{4,32}'
>>> string = 'a'*3
>>> print re.match(expression, string)
None
>>> string = 'a'*100
>>> output = re.match(expression, string)
>>> len(output.string)
100
为什么会这样? 我应该如何使用它?
答案 0 :(得分:4)
match
匹配字符串的开头 - 但它也不会锚定到结尾。正则表达式匹配第二种情况中的前32 a
s。我想你想要:
expression = '^\w{4,32}$'
(len(output.string)
仍然是100的原因是因为它只是引用正则表达式匹配的字符串,而不是它实际匹配的部分。您可以使用m.group(0)
来查找真实的匹配。)
答案 1 :(得分:1)
您必须使用字边界:
>>> expression = '\b\w{4,32}\b'
字边界\b
是来自\w
的字符和另一个字符(不是来自\w
)之间的零宽度限制,包括字符串的开头和结尾)
答案 2 :(得分:0)
您希望输入介于4到32个字符之间。但是,只有字的字符串超过32个字符呢?你的正则表达式控制前32个字符,并不关心33号后的字符。所以第33个角色可以是任何东西。
所以:
expression = '\W*\w{4,32}\W*'
表示您的字符串可以以任何非单词字符(\W*
)开头,后跟长度介于4和32之间的单词(\w{4,32}
),之后可能包含任何非单词字符( \W*
)。 *
表示重复次数为0或更多,它允许您在4个32个字符之间进行仅字输入
在您的代码中,由于您的正则表达式测试通过,它将获得整个字符串的长度。