我想使用正则表达式(‘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'>有人能解释一下为什么上面的表达式与上面的“-”和“(”)匹配吗?
发布于 2017-09-14 05:31:42
你快到了!在regex中,*匹配给定字符的零或多个,总是匹配最长的序列。例如,A*将与AAAbcde匹配,匹配将是AAA。它还将与BCDE匹配空匹配,但仍然匹配。为了实现您想要的结果,您需要在模式的末尾添加$:
re.match("[a-zA-Z_][0-9a-zA-Z_]*$",name)这要求模式与输入匹配,直到行尾,由$表示。
如果使用的是re.search,则需要使用^启动模式。但是,对于re.match,它不是必需的,因为它只匹配字符串的开头:Python3文档:搜索与匹配。
发布于 2017-09-14 05:32:14
发布于 2017-09-14 05:38:50
https://stackoverflow.com/questions/46211163
复制相似问题