简体   繁体   中英

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 right side) the word 'i' , so in this case am, believe, can, believe, can .

How could I do that in python ? I found this but it only gives the first word, so in this case, 'am'

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

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

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM