我匹配标识符,但现在我遇到了问题:我的标识符允许包含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"做了我想要的东西,但它不匹配«»,我还需要一个与数字不匹配的正则表达式.
所述重新模块支持\ 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*