gpt4 book ai didi

python - 在 ply 的正则表达式中匹配 unicode

转载 作者:太空狗 更新时间:2023-10-30 02:00:52 24 4
gpt4 key购买 nike

我正在匹配标识符,但现在我遇到了一个问题:我的标识符允许包含 unicode 字符。因此,旧的做事方式是不够的:

t_IDENTIFIER = r"[A-Za-z](\\.|[A-Za-z_0-9])*"

my markup language我通过允许除我明确使用的字符之外的所有字符来匹配 unicode 字符,因为我的标记语言只有两三个字符我需要以这种方式转义。

如何将所有 unicode 字符与 python 正则表达式和 ply 匹配?这也是一个好主意吗?

我想让人们在他们的程序中使用像 Ω » « ° foo² väli π 这样的标识符作为标识符(变量名等)。见鬼!如果可行的话,我希望人们可以用自己的语言编写程序!不管怎样,现在很多地方都支持 unicode,应该普及。

编辑:POSIX 字符类似乎无法被 python 正则表达式识别。

>>> import re
>>> item = re.compile(r'[[:word:]]')
>>> print item.match('e')
None

编辑:更好地解释我需要什么。我需要一个匹配所有 unicode 可打印字符但根本不匹配 ASCII 字符的正则表达式。

编辑:r"\w"做了一些我想要的东西,但它不匹配 « »,我还需要一个不匹配数字的正则表达式。

最佳答案

re模块支持\w 语法:

If UNICODE is set, this will match the characters [0-9_] plus whatever is classified as alphanumeric in the Unicode character properties database.

因此下面的例子展示了如何匹配unicode标识符:

>>> import re
>>> m = re.compile('(?u)[^\W0-9]\w*')
>>> m.match('a')
<_sre.SRE_Match object at 0xb7d75410>
>>> m.match('9')
>>> m.match('ab')
<_sre.SRE_Match object at 0xb7c258e0>
>>> m.match('a9')
<_sre.SRE_Match object at 0xb7d75410>
>>> m.match('unicöde')
<_sre.SRE_Match object at 0xb7c258e0>
>>> m.match('ödipus')
<_sre.SRE_Match object at 0xb7d75410>

所以你要找的表达式是:(?u)[^\W0-9]\w*

关于python - 在 ply 的正则表达式中匹配 unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/238223/

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