2012-02-06 65 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