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

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

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

当前回答

拆分字符串,剥离单词和标点符号怎么样?

w in [ws.strip(',.?!') for ws in p.split()]

如有需要,请注意小写或大写:

w.lower() in [ws.strip(',.?!') for ws in p.lower().split()]

也许是这样:

def wcheck(word, phrase):
    # Attention about punctuation and about split characters
    punctuation = ',.?!'
    return word.lower() in [words.strip(punctuation) for words in phrase.lower().split()]

示例:

print(wcheck('CAr', 'I own a caR.'))

我没有检查性能……

其他回答

if 'seek' in 'those who seek shall find':
    print('Success!')

但请记住,这匹配的是一个字符序列,而不一定是一个完整的单词——例如,'swordsmith'中的'word'是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

Find返回一个整数,表示搜索项所在位置的索引。如果没有找到,则返回-1。

haystack = 'asdf'

haystack.find('a') # result: 0
haystack.find('s') # result: 1
haystack.find('g') # result: -1

if haystack.find(needle) >= 0:
  print('Needle found.')
else:
  print('Needle not found.')

高级的方法来检查确切的单词,我们需要在一个长字符串中找到:

import re
text = "This text was of edited by Rock"
#try this string also
#text = "This text was officially edited by Rock" 
for m in re.finditer(r"\bof\b", text):
    if m.group(0):
        print("Present")
    else:
        print("Absent")

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

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