正则表达式匹配Unicode变量名称

jmd_dk

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

 re.search(r'[_a-zA-Z][_a-zA-Z0-9]*', s)

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

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

根据文档\w在正则表达式中将匹配任何Unicode单词文字,包括数字和下划线。但是,我不确定此字符集是否完全包含可能在变量名中使用的那些字符。

即使字符集\w完全包含可以合法构造Python 3变量名的字符,如何使用它来创建我的正则表达式?使用just\w+还可以匹配以数字开头的“单词”,这是不好的。我想到以下解决方案,

re.search(r'(\w&[^0-9])\w*', s)

&“和”运算符在哪里(就像|“或”运算符一样)。因此,括号将匹配同时不是数字的任何单词文字。问题是&运算符不存在,因此我无法解决任何问题。

编辑

尽管在这个问题中也可以找到“双重否定”的技巧(如下文中Patrick Artner的回答所述),但请注意,这仅部分回答了我的问题。[^\W0-9]\w*仅在可以保证\w与合法的Unicode字符以及数字0-9完全匹配时,才可以使用我想要这些知识的来源,或完成工作的其他正则表达式。

帕特里克·阿特纳

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

[^\W0-9]\w*

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

Doku:正则表达式语法

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章