Skip to main content
 首页 » 编程设计

python之使用 RE 查找仅包含拉丁字母、数字和下划线且不能以数字开头的字符串

2025年05月04日21mate10pro

我想使用正则表达式('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