我使用下面的正则表达式来检查字符串是否包含字母数字,但我得到结果 = None。
>>> r = re.match('!^[0-9a-zA-Z]+$','_')
>>> print r
None
最佳答案
!
在正则表达式中没有任何特殊含义,您需要使用^
来否定匹配,就像这样
>>> re.match('^[^0-9a-zA-Z]+$','_')
<_sre.SRE_Match object; span=(0, 1), match='_'>
在 Python 2.x 中,
>>> re.match('^[^0-9a-zA-Z]+$','_')
<_sre.SRE_Match object at 0x7f435e75f238>
注意:仅当整个字符串充满非字母数字字符时,此正则表达式才会为您提供匹配项。
如果您想检查任何字符是否为非字母数字,则需要使用 re.search
并删除 +
和 $
,像这样
>>> re.search('[^0-9a-zA-Z]', '123abcd!')
<_sre.SRE_Match object; span=(7, 8), match='!'>
这意味着在字符串中的任何位置查找除 0-9
、a-z
和 A-Z
之外的任何字符。 (re.match
将尝试从字符串的开头进行匹配。详细了解 re.search
和 re.match
here )。
注意:此问题的最佳解决方案是使用 str.isalnum
,如下所示
>>> "123abcdABCD".isalnum()
True
>>> "_".isalnum()
False
仅当整个字符串充满字母数字字符时,才会返回True
。但是,如果您想查看字符串中的任何字符是否是字母数字,那么您需要使用 any
函数,如下所示
>>> any(char.isalnum() for char in "_!@#%^$()*")
False
>>> any(char.isalnum() for char in "_!@#%^a()*")
True
关于Python正则表达式检查字母数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29014462/