2012-02-28 47 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