在python中使用“in”匹配整个单词

时间:2012-02-28 05:59:05

标签: python

我一直在寻找一段时间,但仍然没有找到答案,也许它与正则表达式有一些关系,但我认为应该有一个简单的答案,我在这里缺少。这对我来说似乎非常微不足道......这里有:

在我得到的python解释器上:

"abc" in "abc123" 

为真。

我想要一个返回False的命令。我想要整个单词匹配。

谢谢!

6 个答案:

答案 0 :(得分:11)

in不是这样做的。

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

答案 1 :(得分:6)

如果您想只对一个单词进行简单匹配,请使用==:

'abc' == 'abc123' # false

如果你正在做'abc' in ['cde','fdabc','abc123'],那么无论如何都会返回False:

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

'abc' in 'abc123'

x in y返回true的原因
  

对于Unicode和字符串类型,x是真的,当且仅当 y是   y.find(x) != -1的子字符串。等效测试是in

因此,要比较单个字符串,请使用'==',如果在字符串集合中进行比较,则可以使用'abc' in ['abc123'](您也可以in - 因为{的行为当y列表或各种类型的集合时,{1}}就像你的直觉一样。

答案 2 :(得分:4)

我可能不理解你的问题,但看起来你想要的是"abc123" == "abc"。这会返回False,而"abc123" == "abc123"会返回True

也许您正在寻找的是匹配整个单词但是分裂在空白上?也就是说,"abc""abc123"不匹配,但它与"abc def"匹配?如果是这种情况,你需要这样的东西:

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

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

答案 3 :(得分:2)

在我的情况下,我使用了一个小技巧。整个单词应该用空格包围。所以,如果我想找到像“ Kill ”这样的词,我会搜索“ Kill ”。在这种情况下,它不会像“技能”这样的词匹配

' kill ' in myString

答案 4 :(得分:0)

您可以尝试使用查找方法并将结果与​​-1进行比较:

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

答案 5 :(得分: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')

第一个例子产生False,另一个产生True