How do you check if a string contains a word python?

The simplest way to check if a string contains a substring in Python is to use the in operator. This will return True or False depending on whether the substring is found. For example:

sentence = 'There are more trees on Earth than stars in the Milky Way galaxy'
word = 'galaxy'

if word in sentence:
    print['Word found.']

# Word found.

Case sensitivity

Note that the above example is case-sensitive so the words will need have the same casing in order to return True. If you want to do a case-insensitive search you can normalize strings using the lower[] or upper[] methods like this:

sentence = 'There are more trees on Earth than stars in the Milky Way galaxy'
word = 'milky'

if word in sentence.lower[]:
    print['Word found.']

# Word found.

Find index of a substring

To find the index of a substring within a string you can use the find[] method. This will return the starting index value of the substring if it is found. If the substring is not found it will return -1.

sentence = 'There are more trees on Earth than stars in the Milky Way galaxy'

print[sentence.find['Earth']]
print[sentence.find['Moon']]

# 24
# -1

Count substrings

You can also count substrings within a string using the count[] method, which will return the number of substring matches. For example:

sentence = 'There are more trees on Earth than stars in the Milky Way galaxy'
word = 'the'

print[sentence.lower[].count[word]]
# 2

Regex

For more advanced string searching you should consider reading up about Python's re module.

I'm working with Python, and I'm trying to find out if you can tell if a word is in a string.

I have found some information about identifying if the word is in the string - using .find, but is there a way to do an if statement. I would like to have something like the following:

if string.find[word]:
    print["success"]

mkrieger1

15.8k4 gold badges46 silver badges57 bronze badges

asked Mar 16, 2011 at 1:10

1

What is wrong with:

if word in mystring: 
   print['success']

Martin Thoma

113k148 gold badges570 silver badges875 bronze badges

answered Mar 16, 2011 at 1:13

fabrizioMfabrizioM

44.9k15 gold badges97 silver badges115 bronze badges

13

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[r'\b[{0}]\b'.format[w], flags=re.IGNORECASE].search

findWholeWord['seek']['those who seek shall find']    # -> 
findWholeWord['word']['swordsmith']                   # -> None

answered Mar 16, 2011 at 1:52

Hugh BothwellHugh Bothwell

53.7k7 gold badges81 silver badges98 bronze badges

6

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 Bothwell's and daSong's 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[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

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

def contains_word[s, w]:
    return f' {w} ' in f' {s} '

answered Apr 11, 2016 at 20:32

user200783user200783

13.3k11 gold badges63 silver badges125 bronze badges

6

find returns an integer representing the index of where the search item was found. If it isn't found, it returns -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.']

Martin Thoma

113k148 gold badges570 silver badges875 bronze badges

answered Mar 16, 2011 at 1:13

Matt HowellMatt Howell

15.4k7 gold badges47 silver badges56 bronze badges

0

You can split string to the words and check the result list.

if word in string.split[]:
    print["success"]

Martin Thoma

113k148 gold badges570 silver badges875 bronze badges

answered Dec 1, 2016 at 18:26

CorvaxCorvax

7447 silver badges11 bronze badges

3

This small function compares all search words in given text. If all search words are found in text, returns length of search, or False otherwise.

Also supports unicode string search.

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

usage:

find_words['çelik güray ankara', 'güray ankara']

answered Jun 22, 2012 at 22:51

Guray CelikGuray Celik

1,2751 gold badge14 silver badges13 bronze badges

0

If matching a sequence of characters is not sufficient and you need to match whole words, here is a simple function that gets the job done. It basically appends spaces where necessary and searches for that in the string:

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

This assumes that commas and other punctuations have already been stripped out.

IanS

15.1k9 gold badges57 silver badges81 bronze badges

answered Jun 15, 2012 at 7:23

daSongdaSong

4071 gold badge5 silver badges9 bronze badges

1

Using regex is a solution, but it is too complicated for that case.

You can simply split text into list of words. Use split[separator, num] method for that. It returns a list of all the words in the string, using separator as the separator. If separator is unspecified it splits on all whitespace [optionally you can limit the number of splits to num].

list_of_words = mystring.split[]
if word in list_of_words:
    print['success']

This will not work for string with commas etc. For example:

mystring = "One,two and three"
# will split into ["One,two", "and", "three"]

If you also want to split on all commas etc. use separator argument like this:

# 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']

Martin Thoma

113k148 gold badges570 silver badges875 bronze badges

answered Dec 18, 2017 at 11:44

tstempkotstempko

1,1761 gold badge14 silver badges16 bronze badges

2

As you are asking for a word and not for a string, I would like to present a solution which is not sensitive to prefixes / suffixes and ignores case:

#!/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[]

If your words might contain regex special chars [such as +], then you need re.escape[word]

answered Aug 9, 2017 at 10:11

Martin ThomaMartin Thoma

113k148 gold badges570 silver badges875 bronze badges

Advanced way to check the exact word, that we need to find in a long string:

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"]

Martin Thoma

113k148 gold badges570 silver badges875 bronze badges

answered Nov 2, 2016 at 8:39

RameezRameez

5345 silver badges11 bronze badges

What about to split the string and strip words punctuation?

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

If need, do attention to lower/upper case:

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

Maybe that way:

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[]]

Sample:

print[wcheck['CAr', 'I own a caR.']]

I didn't check performance...

answered Dec 26, 2020 at 5:18

marciomarcio

4165 silver badges16 bronze badges

You could just add a space before and after "word".

x = raw_input["Type your word: "]
if " word " in x:
    print["Yes"]
elif " word " not in x:
    print["Nope"]

This way it looks for the space before and after "word".

>>> Type your word: Swordsmith
>>> Nope
>>> Type your word:  word 
>>> Yes

Martin Thoma

113k148 gold badges570 silver badges875 bronze badges

answered Feb 26, 2015 at 14:23

PyGuyPyGuy

433 bronze badges

1

I believe this answer is closer to what was initially asked: Find substring in string but only if whole words?

It is using a simple regex:

import re

if re.search[r"\b" + re.escape[word] + r"\b", string]:
  print['success']

Martin Thoma

113k148 gold badges570 silver badges875 bronze badges

answered Aug 25, 2021 at 13:25

Milos CuculovicMilos Cuculovic

18.9k50 gold badges155 silver badges264 bronze badges

One of the solutions is to put a space at the beginning and end of the test word. This fails if the word is at the beginning or end of a sentence or is next to any punctuation. My solution is to write a function that replaces any punctuation in the test string with spaces, and add a space to the beginning and end or the test string and test word, then return the number of occurrences. This is a simple solution that removes the need for any complex regex expression.

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]

To count the number of occurrences of a word in a string:

sentence = "A Frenchman ate an apple"
print[countWords['a', sentence]]

returns 1

sentence = "Is Oporto a 'port' in Portugal?"
print[countWords['port', sentence]]

returns 1

Use the function in an 'if' to test if the word exists in a string

answered Mar 18 at 9:37

iStuartiStuart

3362 silver badges6 bronze badges

How do I check if a string contains words?

You can use the PHP strpos[] function to check whether a string contains a specific word or not. The strpos[] function returns the position of the first occurrence of a substring in a string. If the substring is not found it returns false .

How do you check if a word is in a string pandas?

str. contains[] function is used to test if pattern or regex is contained within a string of a Series or Index. The function returns boolean Series or Index based on whether a given pattern or regex is contained within a string of a Series or Index.

How do you check the content of a string in Python?

To check if a string contains a substring in Python using the in operator, we simply invoke it on the superstring: fullstring = "StackAbuse" substring = "tack" if substring in fullstring: print["Found!"] else: print["Not found!"]

How do you check if a letter is present in a string Python?

You can use the in operator or the string's find method to check if a string contains another string. The in operator returns True if the substring exists in the string. Otherwise, it returns False. The find method returns the index of the beginning of the substring if found, otherwise -1 is returned.

Chủ Đề