Python正则表达式匹配Unicode属性

78 投票
6 回答
20997 浏览
提问于 2025-04-15 16:36

Perl和一些其他的正则表达式引擎支持Unicode属性,比如可以在正则表达式中使用类别。例如,在Perl中,你可以用\p{Ll}来匹配任意一个小写字母,或者用\p{Zs}来匹配任何空格分隔符。不过,我在Python的2.x和3.x版本中没有看到对这个功能的支持(对此我感到很遗憾)。有没有人知道有什么好的方法可以实现类似的效果?自己想出来的解决方案也欢迎。

6 个回答

7

你可以逐个字符地费力地使用unicodedata模块:

import unicodedata

def strip_accents(x):
    return u''.join(c for c in unicodedata.normalize('NFD', x) if unicodedata.category(c) != 'Mn')
78

regex模块(这是一个可以替代标准的re模块的工具)支持使用\p{}这种写法来处理Unicode字符的属性。

25

你有没有试过Ponyguruma,这是一个把Python和Oniguruma正则表达式引擎连接起来的工具?在这个引擎里,你可以简单地用\p{Armenian}来匹配亚美尼亚字符。\p{Ll}或者\p{Zs}也可以使用。

撰写回答