当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在ply的正则表达式中匹配unicode》经验,为你挑选了1个好方法。

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

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

在我的标记语言解析器中,我通过允许除了我明确使用的那些字符之外的所有字符来匹配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"做了我想要的东西,但它不匹配«»,我还需要一个与数字不匹配的正则表达式.



1> Florian Bösc..:

所述重新模块支持\ W语法其中:

如果设置了UNICODE,则这将匹配字符[0-9_]以及Unicode字符属性数据库中分类为字母数字的任何字符.

因此,以下示例显示了如何匹配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*


Walter,你还没有正确地阅读这个问题:1)目标是编程语言中的标识符,通常不会以0-9开头.2)解析器(ply)负责解析,并且无法控制它将如何调用匹配,因此需要(?u).
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有