检查Python字符串中是否包含某个单词

253 投票
15 回答
1119203 浏览
提问于 2025-04-16 13:47

我正在使用Python,想知道怎么判断一个单词是否在一个字符串里。

我找到了一些关于如何检查单词是否在字符串中的信息,比如用 .find 方法,但我想知道有没有办法用 if 语句来实现。我希望能有类似下面这样的代码:

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

15 个回答

67

如果你想知道一个完整的单词是否在一个用空格分开的单词列表中,可以直接使用:

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} '
214
if 'seek' in 'those who seek shall find':
    print('Success!')

但是要记住,这个匹配的是一串字符,而不一定是一个完整的单词——比如说,'word' in 'swordsmith' 这个表达式的结果是 True。如果你只想匹配完整的单词,那你应该使用正则表达式:

import re

def findWholeWord(w):
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search

findWholeWord('seek')('those who seek shall find')    # -> <match object>
findWholeWord('word')('swordsmith')                   # -> None
455

这段代码有什么问题呢:

if word in mystring: 
   print('success')

撰写回答