使python字符串等效与SQL匹配一样工作

时间:2016-08-20 05:06:44

标签: python

我正在尝试匹配两个字符串,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)方式,但它并没有让我到任何地方。我该如何解决这个问题?

2 个答案:

答案 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