python - 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)
解决方案
推荐阅读
- post - 在 Redux-Saga 中使用 POST 调用处理错误
- c# - .NET CORE 3 Windows 服务的基本路径返回 C:\Windows\System32,但实际文件夹为 D:\MyCustomService
- regex - 替换文件中的字符串和正则表达式
- or-tools - 启用取货和交付后后继约束失败
- node.js - 节点JS | [ERR_HTTP_INVALID_STATUS_CODE]:无效状态代码:TypeError:无法读取未定义的属性“类别”
- javascript - Heroku - 将 PHP 服务器端的环境变量引用到 JS 客户端文件
- android - React Native 禁用 console.warn 应用屏幕底部的黄色框
- html - 为什么 Outlook 2007、10、13、16、19 更改了我的字体大小?
- flutter - 如何从颤动的对话框中获取值?
- .net - 将一台复制服务器变成观察者