我正在尝试匹配两个字符串,Serhat Kılıç
和serhat kilic
。在SQL中,这很容易,我可以做到:
select name from main_creditperson where name = 'serhat kılıç'
union all
select name from main_creditperson where name = 'serhat kilic';
===
name
Serhat Kılıç
Serhat Kılıç
换句话说,两个名称都返回相同的结果。我如何在python中做一个等效的字符串,看看这两个名字是相同的'在SQL意义上。我希望做类似的事情:
if name1 == name2:
do_something()
我尝试了unicodedata.normalize('NFKD', input_str)
方式,但它并没有让我到任何地方。我该如何解决这个问题?
答案 0 :(得分:1)
如果您对所有内容都使用ASCII,那么您可以检查Where is Python's "best ASCII for this Unicode" database? Unidecode
是否相当不错,但是它是GPL许可的,这可能是某个项目的问题。无论如何,它可以在你的情况下以及在很多其他的情况下工作,并且适用于Python 2和3(这些都来自Python 3,因此更容易看到发生了什么):
doFilter : function(){
var filters = $$('#'+this.containerId+' .filter input', '#'+this.containerId+' .filter select');
var elements = [];
for(var i in filters){
if(filters[i].value && filters[i].value.length) elements.push(filters[i]);
}
if (!this.doFilterCallback || (this.doFilterCallback && this.doFilterCallback())) {
this.reload(this.addVarToUrl(this.filterVar, encode_base64(Form.serializeElements(elements))));
}
},
resetFilter = function(){
this.reload(this.addVarToUrl(this.filterVar, ''));
},
checkCheckboxes : function(element){
elements = Element.select($(this.containerId), 'input[name="'+element.name+'"]');
for(var i=0; i<elements.length;i++){
this.setCheckboxChecked(elements[i], element.checked);
}
},
function openGridRow(grid, event){
var element = Event.findElement(event, 'tr');
if(['a', 'input', 'select', 'option'].indexOf(Event.element(event).tagName.toLowerCase())!=-1) {
return;
}
if(element.title){
setLocation(element.title);
}
}
答案 1 :(得分:0)
我发现了这个
def compare_words (str_1, str_2):
return unidecode(str_1.decode('utf-8')) == str_2
在Python 2.7上测试:
In[2]: from unidecode import unidecode
In[3]: def compare_words (str_1, str_2):
return unidecode(str_1.decode('utf-8')) == str_2
In[4]: print compare_words('serhat kılıç', 'serhat kilic')
True