首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RE查找仅由拉丁字母、数字和下划线组成的字符串,它们不能以数字开头

使用RE查找仅由拉丁字母、数字和下划线组成的字符串,它们不能以数字开头
EN

Stack Overflow用户
提问于 2017-09-14 05:27:23
回答 5查看 1.6K关注 0票数 2

我想使用正则表达式(‘re’)来查找变量名是否仅由拉丁字母、数字和下划线组成,并且它们不能以数字开头。

我试着用

代码语言:javascript
复制
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'>

有人能解释一下为什么上面的表达式与上面的“-”和“(”)匹配吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-09-14 05:31:42

你快到了!在regex中,*匹配给定字符的零或多个,总是匹配最长的序列。例如,A*将与AAAbcde匹配,匹配将是AAA。它还将与BCDE匹配空匹配,但仍然匹配。为了实现您想要的结果,您需要在模式的末尾添加$

代码语言:javascript
复制
re.match("[a-zA-Z_][0-9a-zA-Z_]*$",name)

这要求模式与输入匹配,直到行尾,由$表示。

如果使用的是re.search,则需要使用^启动模式。但是,对于re.match,它不是必需的,因为它只匹配字符串的开头:Python3文档:搜索与匹配

票数 3
EN

Stack Overflow用户

发布于 2017-09-14 05:32:14

您想要匹配完整的字符串才能成功。[a-zA-Z_][0-9a-zA-Z_]*qq-q匹配,因为您应该在这里检查边界。看看例1,看看匹配的组是什么。

您可以添加类似于例2的边界。

票数 2
EN

Stack Overflow用户

发布于 2017-09-14 05:38:50

到大部分完整的字符串"[A-Za-z][A-Za-z\d_]*$", name)

没有输出名称=‘qq’和名称='kri[shna0‘

编辑以匹配下划线

参见此链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46211163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档