2012-02-06 49 views
1

我想看看是否一个字符串包含一定的文字,如果是做什么的,我一直在使用python的in运营商,但我意识到它过于严格基本上我有以下代码Python的非严格搜索文本

通常这将返回True

dynamic = "v23434" 
filename = "v23434.jpg" 

if dynamic in filename: return True 

但是,如果我有

dynamic = "v23434-" 
filename = "v23434.jpg" 

然后返回False,由于破折号在dynamic的末尾,所以我的问题是,有没有办法检查字符串文件名是否有字符串dynamic,但是在某种程度上,它不一定是完美匹配,只有几个字符就足够了。

编辑

通过几个大字,我的意思是由动态的前3个字符的字符串,所以如果我有

dynamic = "v23434-" 
filename = "testingv23434.jpg" 

,那么它应该一致,因为子"v23"filename

+3

那么,你如何定义“几个字符”?你如何定义一个不完美的匹配?你需要在'filename'中找到'dynamic'的_first_少(或多少个?)字符,或者你在寻找'filename'中发生的'dynamic'的_any_子字符串?可能有一些最小长度?有算法来解决所有这些问题,但您必须具体说明您的要求。 – 2012-02-06 21:35:51

+2

请参阅[this](http://stackoverflow.com/q/682367/566644)问题。 – 2012-02-06 21:36:56

+1

你可以使用像莱文斯坦的距离 – shenshei 2012-02-06 21:37:24

回答

3

如果您只想测试搜索字词中的前三个字符,请使用

def test(dynamic, filename): 
    return dynamic[:3] in filename 
+0

坚果,打*我* * – kurosch 2012-02-06 21:47:28

+0

哇我知道我让它变得复杂,感谢:D – Paulo 2012-02-06 21:50:46

+0

@ danihp:这就是他想要的。但是,感谢关于不必要的“if”! – 2012-02-06 21:54:01

1

就切掉了一个字符串的前三个字母:

if dynamic[:3] in filename 
1

这段代码将有助于您的问题我您正在寻找至少3个连续的字符

>>> dynamic = "v23434-" 
>>> filename = "testingv23434.jpg" 
>>> any(s in filename for s in [ dynamic[i:i+3] for i in range(0, len(dynamic)-2) ]) 
True 

>>> filename = "testingv334.jpg" 
>>> any(s in filename for s in [ dynamic[i:i+3] for i in range(0, len(dynamic)-2) ]) 
False