我一直在寻找一段时间,但仍然没有找到答案,也许它与正则表达式有一些关系,但我认为应该有一个简单的答案,我在这里缺少。这对我来说似乎非常微不足道......这里有:
在我得到的python解释器上:
"abc" in "abc123"
为真。
我想要一个返回False的命令。我想要整个单词匹配。
谢谢!
答案 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