在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完全匹配时,才可以使用。我想要这些知识的来源,或完成工作的其他正则表达式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句