我想使用正则表达式('re')来查找变量名称是否仅由拉丁字母、数字和下划线组成,并且它们不能以数字开头。
我试过用
In [3]: name='qq-q'
In [4]: re.match("[a-zA-Z_][0-9a-zA-Z_]*",name)
Out[4]: <_sre.SRE_Match object; span=(0, 2), match='qq'>
In [5]: name='kri[shna0'
In [6]: re.match("[a-zA-Z_][0-9a-zA-Z_]*",name)
Out[6]: <_sre.SRE_Match object; span=(0, 3), match='kri'>
有人能解释一下为什么上面的表达式匹配上面的 '-' 和 '[' 吗?
最佳答案
你快到了!在正则表达式中,*
匹配零个或多个给定字符,始终匹配最长的序列。例如,A*
将与 AAAbcde
匹配,匹配将为 AAA
。它还会与 BCDE
进行空匹配,但仍然是匹配。要实现您想要的效果,您需要在模式末尾添加 $
:
re.match("[a-zA-Z_][0-9a-zA-Z_]*$",name)
这要求模式匹配输入直到行尾,由 $
如果您使用的是 re.search
,则需要以 ^
开始该模式。但是 re.match
没有必要,因为它只匹配字符串的开头:Python3 doc: search vs match
关于python - 使用 RE 查找仅包含拉丁字母、数字和下划线且不能以数字开头的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46211163/