我使用以下正则表达式作为连接到MongoDB数据库的应用程序的过滤器:
{"$regex": re.compile(r'\b' + re.escape(value) + r'\b', re.IGNORECASE | re.UNICODE)}
正则表达式满足我的搜索条件,但我有一个问题,那就是它没有忽略重音。例如:
数据库条目为:“埃斯科瓦尔,哥伦比亚历史上最糟糕的人”。
然后我搜索“Elpatron”
我没有得到任何结果,因为字母O中的“重音”不让我取记录。我该怎么解决?我以为有了re.UNICODE部分,我会忽略这一点。
1条答案
按热度按时间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?