regex 为什么这个python正则表达式没有忽略重音符号?

fiei3ece  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(113)

我使用以下正则表达式作为连接到MongoDB数据库的应用程序的过滤器:

{"$regex": re.compile(r'\b' + re.escape(value) + r'\b', re.IGNORECASE | re.UNICODE)}

正则表达式满足我的搜索条件,但我有一个问题,那就是它没有忽略重音。例如:
数据库条目为:“埃斯科瓦尔,哥伦比亚历史上最糟糕的人”。
然后我搜索“Elpatron
我没有得到任何结果,因为字母O中的“重音”不让我取记录。我该怎么解决?我以为有了re.UNICODE部分,我会忽略这一点。

cbwuti44

cbwuti441#

因为oó是不同的字符。re.UNICODE并不像你想象的那样,你可以在这里阅读它:https://docs.python.org/3/library/re.html#re.ASCII
解决这个问题的方法是,在使用正则表达式进行搜索之前,先对字符串进行预处理,将所有此类字符转换为它们的关联ascii对应字符。参见:What is the best way to remove accents (normalize) in a Python unicode string?

相关问题