首页 > 解决方案 > Python 正则表达式:re.sub() 不能正确处理重音字符,与 re.compile().sub() 相反

问题描述

我需要从非单词字符中删除一个字符串:

>>>string = u'_Óscar;'
>>>print re.sub(r'[_\W]*', u'', string, re.UNICODE)
scar

...但是 re.sub() 将重音字母混淆为非单词字符 (\W)。这是:错误地,re.sub() 从 'Óscar' 中删除了 'Ó'。

但是, re.compile().sub() 正确处理重音字母:

>>>string = u'_Óscar;'
>>>print re.compile('[_\W]*', re.UNICODE ).sub(u'', string)
Óscar

re.compile().sub() 删除了下划线和分号,但正确地保留了“Ó”。

re.sub() 和 re.compile().sub() 之间是否存在正则表达式算法差异?我想我错过了一些东西。


编辑:感谢@JonClements 评论解决:我错误地设置了 re.UNICODE 标志。应该设置:flags=re.UNICODE. 所以以下工作就好了:

re.sub(r'[_\W]*', u'', string, flags=re.UNICODE)
re.compile('[_\W]*', flag=re.UNICODE ).sub(u'', string)

标签: pythonregexpython-unicode

解决方案


推荐阅读