2014-02-07 36 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

相关问题