首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配Unicode变量名的正则表达式

匹配Unicode变量名的正则表达式
EN

Stack Overflow用户
提问于 2018-03-05 05:26:35
回答 2查看 816关注 0票数 3

在Python 2中,Python变量名仅包含ASCII字母、数字和下划线,并且不能以数字开头。因此,

代码语言:javascript
复制
 re.search(r'[_a-zA-Z][_a-zA-Z0-9]*', s)

将在str s中找到匹配的Python名称。

在Python 3中,字母不再局限于ASCII。我正在寻找一个新的正则表达式,将匹配任何和所有合法的Python3变量名。

根据the docs的说法,正则表达式中的\w将匹配任何Unicode单词文字,包括数字和下划线。但是,我不确定这个字符集是否包含变量名称中可能使用的字符。

即使字符集\w包含可以合法构造Python3变量名的字符,我如何使用它来创建我的正则表达式?只使用\w+也会匹配以数字开头的“单词”,这是不好的。我有以下的解决方案:

代码语言:javascript
复制
re.search(r'(\w&[^0-9])\w*', s)

其中,&是“与”运算符(就像|是“或”运算符一样)。因此,括号将匹配同时不是数字的任何单词文字。这样做的问题是&运算符不存在,所以我没有解决方案。

编辑

虽然在this question中也可以找到“双重否定”技巧(正如Patrick Artner在下面的答案中所解释的那样),但请注意,这只回答了我的问题的一部分。只有在保证\w与合法的Unicode字符加上数字0-9完全匹配的情况下,才能使用[^\W0-9]\w*。我想要一个这种知识的来源,或一些其他正则表达式,使工作完成。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-05 05:37:01

您可以使用双重否定- \W\w不是的任何东西-只是不允许它允许任何\w

代码语言:javascript
复制
[^\W0-9]\w*

本质上是使用除0-9之外的任何非单词字符,后跟任何单词字符任意次数。

Doku:regular-expression-syntax

票数 3
EN

Stack Overflow用户

发布于 2018-03-05 05:48:43

您可以尝试使用

代码语言:javascript
复制
^(?![0-9])\w+$

它不会部分匹配无效的变量名

或者,如果您不需要使用regex。str.isidentifier()可能会做你想做的事情。

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

https://stackoverflow.com/questions/49100678

复制
相关文章

相似问题

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