2014-02-07 35 views
1
string = "Hello World" 

我想,如果我尋找任何的話返回True的方法:如何查找看起來像另一個字符串的字符串?

heli, owo, worlh, hillo, hilo 
+2

僅供參考,你想閱讀有關「模糊匹配」或「近似字符串匹配」(見[此維基百科的文章(http://en.wikipedia.org/wiki/Approximate_string_matching))。 – senshin

+1

[...或這個問題](http://stackoverflow.com/questions/682367/good-python-modules-for-fuzzy-string-comparison) –

回答

2

最好的選擇可能是從標準庫difflib。 difflib.SequenceMatcher()會給你兩個字符串之間的相似度量,它不會返回true,但是當然你可以編寫一個函數來爲你的字符串返回True。

import difflib 
phrase = "Hello World" 
for item in ["heli", "owo", "worlh", "hillo", "hilo"]: 
    print difflib.SequenceMatcher(None,a=phrase,b=item).ratio() 

這將打印

0.4 
0.428571428571 
0.5 
0.5 
0.4 

如果像你說的,你需要布爾適用於所有匹配的字符串,可以簡單的寫,這將返回True如果測度高於0.4的功能。

def fuzzyBool(phrase,word): 
    return difflib.SequenceMatcher(None,a=phrase,b=word).ratio() > 0.4 

然後在循環中使用它。

+0

該文檔建議「作爲一個經驗法則,比率( )值超過0.6意味着序列接近匹配「。因此,雖然fuzzyBool可能會測試「difflib.SequenceMatcher(None,a = phrase,b = word).ratio()> 0.6」。 – Eduardo

+0

我認爲每個人都可以決定哪個比例適合他們。模糊匹配總是有點主觀,在這裏很難找到一些客觀的度量。 –

+1

最後它很模糊:P – Eduardo

相關問題