我正在使用Python,我试图找出你是否可以判断一个单词是否在字符串中。
我找到了一些关于识别单词是否在字符串中的信息-使用.find,但是否有一种方法来执行if语句。我想要这样的东西:
if string.find(word):
print("success")
我正在使用Python,我试图找出你是否可以判断一个单词是否在字符串中。
我找到了一些关于识别单词是否在字符串中的信息-使用.find,但是否有一种方法来执行if语句。我想要这样的东西:
if string.find(word):
print("success")
当前回答
您可以将字符串拆分为单词并检查结果列表。
if word in string.split():
print("success")
其他回答
如果你想知道一个完整的单词是否在一个以空格分隔的单词列表中,只需使用:
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} '
这个小函数比较给定文本中的所有搜索词。如果在文本中找到所有搜索词,则返回搜索长度,否则返回False。
也支持unicode字符串搜索。
def find_words(text, search):
"""Find exact words"""
dText = text.split()
dSearch = search.split()
found_word = 0
for text_word in dText:
for search_word in dSearch:
if search_word == text_word:
found_word += 1
if found_word == len(dSearch):
return lenSearch
else:
return False
用法:
find_words('çelik güray ankara', 'güray ankara')
使用regex是一种解决方案,但对于这种情况来说太复杂了。
您可以简单地将文本分割成单词列表。使用split(separator, num)方法。它返回字符串中所有单词的列表,使用分隔符作为分隔符。如果separator未指定,则对所有空格进行分割(您可以选择将分割的数量限制为num)。
list_of_words = mystring.split()
if word in list_of_words:
print('success')
这将不工作的字符串与逗号等。例如:
mystring = "One,two and three"
# will split into ["One,two", "and", "three"]
如果你也想拆分所有的逗号等,使用分隔符参数如下:
# whitespace_chars = " \t\n\r\f" - space, tab, newline, return, formfeed
list_of_words = mystring.split( \t\n\r\f,.;!?'\"()")
if word in list_of_words:
print('success')
出了什么问题:
if word in mystring:
print('success')
解决方案之一是在测试单词的开头和结尾放置一个空格。如果单词位于句首或句尾,或在任何标点符号旁边,则不适用。我的解决方案是编写一个函数,用空格替换测试字符串中的任何标点符号,并在开头和结尾或测试字符串和测试单词之间添加一个空格,然后返回出现的次数。这是一个简单的解决方案,不需要任何复杂的正则表达式。
def countWords(word, sentence):
testWord = ' ' + word.lower() + ' '
testSentence = ' '
for char in sentence:
if char.isalpha():
testSentence = testSentence + char.lower()
else:
testSentence = testSentence + ' '
testSentence = testSentence + ' '
return testSentence.count(testWord)
计算一个单词在字符串中出现的次数:
sentence = "A Frenchman ate an apple"
print(countWords('a', sentence))
返回1
sentence = "Is Oporto a 'port' in Portugal?"
print(countWords('port', sentence))
返回1
使用'if'中的函数来测试单词是否存在于字符串中