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

标签 python regex python-3.x

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

相关文章:

python - Python 中类似 MATLAB 的结构

python - 在 matplotlib 中将数据坐标转换为轴坐标

java - 如何在每个以冒号结尾的单词之前添加换行符?

javascript - 检查元素是否包含字符串,并且除了字符串之外什么都没有 - 也许是正则表达式

python-3.x - python3上下文管理器强制提前退出

python - 提高 pandas 数据框的性能

Python 在线程中处理 Socketserver 请求

python - 搜索不匹配 Google Calendar API 查询中的单个字符?

regex - 在 Eclipse 查找/替换字段中,我可以更改正则表达式匹配结果 $1 吗?

Python C API : Using PyEval_EvalCode