2012-02-28 63 views
2

我一直在尋找有一段時間了這一點,但使用「在」全字仍然沒有找到答案,也許它有一些事情用正則表達式,但我認爲應該有一個簡單的答案,我在這裏失蹤。這似乎很瑣碎,我......這裏有雲:匹配在python

在Python解釋器,我得到:

"abc" in "abc123" 

爲真。

我希望它返回一個假的命令。我希望整個單詞能夠匹配。

謝謝!

+1

你想「ABC 123」來匹配呢? – DSM 2012-02-28 06:01:55

+0

包括你需要的一些案例。你的問題對我來說有點不清楚。 – RanRag 2012-02-28 06:04:52

+0

是的..得到了我的答案...謝謝 – Rahul 2012-02-28 06:22:40

回答

4

如果你想要做的只是一個字的簡單的匹配,使用==:

'abc' == 'abc123' # false 

如果你正在做'abc' in ['cde','fdabc','abc123'],即返回False反正:

'abc' in ['cde','fdabc','abc123'] # False 

'abc' in 'abc123'返回true究其原因,從docs

對於Unicode和字符串類型,x in y爲真,當且僅當x是 子的y。等效測試是y.find(x) != -1

所以針對一個字符串,使用「==」比較,如果字符串的集合中的比較,可以用來in(你也可以做'abc' in ['abc123'] - 因爲in作品的行爲,你的直覺想象當y列表或收集各種各樣的

+0

順便說一句,你如何查找python文檔'in'?!使用Google搜索「python」「in」並不是那麼有用......(我很好奇爲什麼'abc123'中的'abc'返回true)。 – 2012-02-28 06:04:54

+2

你可以在你的解釋器中做「幫助」(「in」)。 – RanRag 2012-02-28 06:06:05

6

in是不是它是如何做。

>>> re.search(r'\babc\b', 'abc123') 
>>> re.search(r'\babc\b', 'abc 123') 
<_sre.SRE_Match object at 0x1146780> 
+0

我認爲這一定是最好的 – jimwan 2013-06-14 15:12:20

0

你可以嘗試使用找到方法和結果爲-1比較:

>>> a = "abc123" 
>>> a.find("abc") 
0 
>>> a.find("bcd") 
-1 
3

我可能不明白你的問題,但似乎你想要的是"abc123" == "abc"。這返回False,而"abc123" == "abc123"返回True

也許你正在尋找的全字,但在空白分裂匹配?也就是說,​​不符"abc123",但它確實匹配"abc def"?如果是這樣的話,你想是這樣的:

def word_in (word, phrase): 
    return word in phrase.split() 

word_in("abc", "abc123") # False 
word_in("abc", "abc def") # True 
+1

for循環是多餘的,您可以在phrase.split()中使用'if w',甚至可以簡單地'在phrase.split()中使用'return w' – 2012-02-28 07:01:40

+0

感謝編輯。 – 2012-02-28 07:16:20

0

也許是錯誤的鏡頭,但它可以在一個更簡單的方式來完成。

def word_in(needle,haystack,case_sensitive=True): 

if needle + ' ' in haystack or ' ' + needle + ' ' in haystack or needle + ' ' in haystack: 
    return True 

return False 



print word_in('abc','abc123') 

print word_in('abc','abc 123') 

第一個例子產生假,其他的真

1

在我的情況,我用一個小把戲。整個單詞應該用空格包圍。所以,如果我想找到像「Kill」這樣的詞,我會搜索「Kill」。在這種情況下,它不會包含「技能」字匹配

' kill ' in myString