Pet*_*ung 1 python django python-3.x
我正在使用Django开发一个简单的网页,我需要实现搜索功能.我目前正在使用这样的东西:
search_box = request.GET['search_box']
X = Foo.objects.filter(Q(title__contains=search_box) | Q(info__contains=search_box)).values()
Run Code Online (Sandbox Code Playgroud)
如果指定的列包含搜索的字符串,它会检查我的数据库,但如果我搜索"kočík"但我的数据库包含"kocik",该怎么办?我如何在Python 3中从字符串中删除diacritis,或者实现它的最佳方法是什么?谢谢
您可以使用unicodedata包.
import unicodedata
def shave_marks(txt):
"""This method removes all diacritic marks from the given string"""
norm_txt = unicodedata.normalize('NFD', txt)
shaved = ''.join(c for c in norm_txt if not unicodedata.combining(c))
return unicodedata.normalize('NFC', shaved)
Run Code Online (Sandbox Code Playgroud)
有关此算法的一些细节:
变音符号的主要问题是,在UTF-8中,有些组合字符会修改前面的字符,而其他字符则包含在字符中.例如,'café'并且'cafe/u0301'看起来是一样的.
来自https://docs.python.org/2/library/unicodedata.html:
即使两个unicode字符串被规范化并且看起来与人类读者相同,如果一个具有组合字符而另一个没有,则它们可能无法相等.
该算法首先分解一个字符串(使用'NFD'方法),使所有变音符号成为组合字符,然后过滤掉所有组合字符,最后组成字符串(使用'NFC'方法).
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |