Python – Check If Word Is In A String

Python – Check If Word Is In A String

What is wrong with:

if word in mystring: 
   print(success)
if seek in those who seek shall find:
    print(Success!)

but keep in mind that this matches a sequence of characters, not necessarily a whole word – for example, word in swordsmith is True. If you only want to match whole words, you ought to use regular expressions:

import re

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

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

Python – Check If Word Is In A String

If you want to find out whether a whole word is in a space-separated list of words, simply use:

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

This elegant method is also the fastest. Compared to Hugh Bothwells and daSongs approaches:

>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(rb({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

Edit: A slight variant on this idea for Python 3.6+, equally fast:

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

Leave a Reply

Your email address will not be published.