我想用正则表达式('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-Za-z][A-Za-z\d_]*$", name)
name='qq-q'和name='kri[shna0'没有输出
编辑以匹配下划线
看这个link
你快到了!在regex中,
*
匹配零个或多个给定字符,总是匹配最长的序列。例如,A*
将与AAAbcde
匹配,匹配将是AAA
。它也将与BCDE
匹配,但仍然是一个匹配。要达到您想要的效果,您需要在模式末尾添加$
:这将请求模式与输入匹配,直到行尾,用
$
表示如果您使用的是
re.search
,则需要以^
开始模式。但是,与re.match
一起使用是不必要的,因为它只匹配字符串的开头:Python3 doc: search vs match您希望匹配完整的字符串才能成功。
[a-zA-Z_][0-9a-zA-Z_]*
匹配qq-q
,因为您应该在这里检查边界。查看example 1以查看匹配的组是什么。在您可以添加边界,如example 2。在
相关问题 更多 >
编程相关推荐