我正在使用Python v2,我试图找出你是否可以判断一个单词是否在一个字符串中。
我找到了一些关于识别单词是否在字符串中的信息 - 使用.find,但有没有办法做IF语句。我希望得到以下内容:
if string.find(word):
print 'success'
感谢您的帮助。
答案 0 :(得分:301)
有什么问题:
if word in mystring:
print 'success'
答案 1 :(得分:141)
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
答案 2 :(得分:31)
如果您想知道整个单词是否在以空格分隔的单词列表中,只需使用:
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} '
答案 3 :(得分:14)
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.'
答案 4 :(得分:9)
这个小函数比较给定文本中的所有搜索词。如果在文本中找到所有搜索词,则返回搜索长度,否则返回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')
答案 5 :(得分:8)
您可以将字符串拆分为单词并检查结果列表。
if word in string.split():
print 'success'
答案 6 :(得分:6)
如果匹配一系列字符是不够的,你需要匹配整个单词,这里有一个简单的功能来完成工作。它基本上在必要时附加空格并在字符串中搜索它:
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
这假定逗号和其他标点符号已被删除。
答案 7 :(得分:4)
当你要求一个单词而不是字符串时,我想提出一个对前缀/后缀不敏感的解决方案并忽略大小写:
#!/usr/bin/env python
import re
def is_word_in_text(word, text):
"""
Check if a word is in a text.
Parameters
----------
word : str
text : str
Returns
-------
bool : True if word is in text, otherwise False.
Examples
--------
>>> is_word_in_text("Python", "python is awesome.")
True
>>> is_word_in_text("Python", "camelCase is pythonic.")
False
>>> is_word_in_text("Python", "At the end is Python")
True
"""
pattern = r'(^|[^\w]){}([^\w]|$)'.format(word)
pattern = re.compile(pattern, re.IGNORECASE)
matches = re.search(pattern, text)
return bool(matches)
if __name__ == '__main__':
import doctest
doctest.testmod()
如果您的字词可能包含正则表达式特殊字符(例如+
),那么您需要re.escape(word)
答案 8 :(得分:3)
检查确切单词的高级方法,我们需要在长字符串中找到它:
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"
答案 9 :(得分:2)
拆分字符串和剥离单词标点符号如何?
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.'))
我没有检查性能...
答案 10 :(得分:1)
你可以在&#34; word&#34;。
之前和之后添加一个空格x = raw_input("Type your word: ")
if " word " in x:
print "Yes"
elif " word " not in x:
print "Nope"
这样它可以在&#34; word&#34;。
之前和之后查找空格>>> Type your word: Swordsmith
>>> Nope
>>> Type your word: word
>>> Yes
答案 11 :(得分:1)
使用正则表达式是通用的解决方案,但在这种情况下会很复杂。
您可以简单地将文本拆分为单词列表。使用拆分(分隔符, num )方法。它返回字符串中所有单词的列表,使用 分隔符 作为分隔符。如果未指定 分隔符 ,则会拆分所有空格(可选择将分割数限制为 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'