Skip to content Skip to sidebar Skip to footer

How To Get A List With Words That Are Next To A Specific Word In A String In Python

Assuming I have a string string = 'i am a person i believe i can fly i believe i can touch the sky'. What I would like to do is to get all the words that are next to (from the ri

Solution 1:

Simple generator method:

def get_next_words(text, match, sep=' '):
    words = iter(text.split(sep))
    for word in words:
        if word == match:
            yield next(words)

Usage:

text = 'i am a person i believe i can fly i believe i can touch the sky'
words = get_next_words(text, 'i')

for w in words:
    print(w)

# am
# believe
# can
# believe
# can

Solution 2:

You can write a regular expression to find the words after the target word:

import re

word = "i"
string = 'i am a person i believe i can fly i believe i can touch the sky'

pat = re.compile(r'\b{}\b \b(\w+)\b'.format(word)) 
print(pat.findall(string))
# ['am', 'believe', 'can', 'believe', 'can']

Solution 3:

One way is to use a regular expression with a look behind assertion:

>>> import re
>>> string = 'i am a person i believe i can fly i believe i can touch the sky'
>>> re.findall(r'(?<=\bi )\w+', string)
['am', 'believe', 'can', 'believe', 'can']

Solution 4:

You can split the string and get the next index of the word "i" as you iterate with enumerate:

string = 'i am a person i believe i can fly i believe i can touch the sky'

sl = string.split()
all_is = [sl[i + 1] for i, word in enumerate(sl[:-1]) if word == 'i']
print(all_is)
# ['am', 'believe', 'can', 'believe', 'can']

Note that as @PatrickHaugh pointed out, we want to be careful if "i" is the last word so we can exclude iterating over the last word completely.


Solution 5:

import re
string = 'i am a person i believe i can fly i believe i can touch the sky'
words = [w.split()[0] for w in re.split('i +', string) if w]
print(words)

Post a Comment for "How To Get A List With Words That Are Next To A Specific Word In A String In Python"