gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:21:02 32 4
gpt4 key购买 nike

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

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

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

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

根据 the docs , 正则表达式中的 \w 将匹配任何 Unicode 字面量,包括数字和下划线。然而,我不确定这个字符集是否包含那些可能在变量名中使用的字符。

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

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

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

编辑

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

最佳答案

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

[^\W0-9]\w*

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

独库:regular-expression-syntax

关于python - 正则表达式匹配 Unicode 变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49100678/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com