我正在使用Python,我试图找出你是否可以判断一个单词是否在字符串中。

我找到了一些关于识别单词是否在字符串中的信息-使用.find,但是否有一种方法来执行if语句。我想要这样的东西:

if string.find(word):
    print("success")

当前回答

如果匹配字符序列还不够,需要匹配整个单词,这里有一个简单的函数可以完成这项工作。它基本上是在必要的地方添加空格,并在字符串中搜索空格:

def smart_find(haystack, needle):
    if haystack.startswith(needle+" "):
        return True
    if haystack.endswith(" "+needle):
        return True
    if haystack.find(" "+needle+" ") != -1:
        return True
    return False

这里假设逗号和其他标点符号已经被去掉。

其他回答

如果你想知道一个完整的单词是否在一个以空格分隔的单词列表中,只需使用:

def contains_word(s, w):
    return (' ' + w + ' ') in (' ' + s + ' ')

contains_word('the quick brown fox', 'brown')  # True
contains_word('the quick brown fox', 'row')    # False

这种优雅的方法也是最快的。与Hugh Bothwell和daSong的方法相比:

>python -m timeit -s "def contains_word(s, w): return (' ' + w + ' ') in (' ' + s + ' ')" "contains_word('the quick brown fox', 'brown')"
1000000 loops, best of 3: 0.351 usec per loop

>python -m timeit -s "import re" -s "def contains_word(s, w): return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search(s)" "contains_word('the quick brown fox', 'brown')"
100000 loops, best of 3: 2.38 usec per loop

>python -m timeit -s "def contains_word(s, w): return s.startswith(w + ' ') or s.endswith(' ' + w) or s.find(' ' + w + ' ') != -1" "contains_word('the quick brown fox', 'brown')"
1000000 loops, best of 3: 1.13 usec per loop

编辑:Python 3.6+略有不同,同样快:

def contains_word(s, w):
    return f' {w} ' in f' {s} '

我相信这个答案更接近最初的问题:在字符串中查找子字符串,但只有在整个单词?

它使用了一个简单的正则表达式:

import re

if re.search(r"\b" + re.escape(word) + r"\b", string):
  print('success')

如果匹配字符序列还不够,需要匹配整个单词,这里有一个简单的函数可以完成这项工作。它基本上是在必要的地方添加空格,并在字符串中搜索空格:

def smart_find(haystack, needle):
    if haystack.startswith(needle+" "):
        return True
    if haystack.endswith(" "+needle):
        return True
    if haystack.find(" "+needle+" ") != -1:
        return True
    return False

这里假设逗号和其他标点符号已经被去掉。

你可以在"word"前后加一个空格。

x = raw_input("Type your word: ")
if " word " in x:
    print("Yes")
elif " word " not in x:
    print("Nope")

这样它会查找“word”前后的空格。

>>> Type your word: Swordsmith
>>> Nope
>>> Type your word:  word 
>>> Yes

您可以将字符串拆分为单词并检查结果列表。

if word in string.split():
    print("success")