androidlinx1234
androidlinx1234

Reputation: 111

Python: replace nth word in string

What is the easiest way in Python to replace the nth word in a string, assuming each word is separated by a space? For example, if I want to replace the tenth word of a string and get the resulting string.

Upvotes: 2

Views: 5267

Answers (5)

Avinash Raj
Avinash Raj

Reputation: 174696

Through re.sub.

>>> import re
>>> my_string = "hello my friend"
>>> new_word = 'goodbye'
>>> re.sub(r'^(\s*(?:\S+\s+){0})\S+', r'\1'+new_word, my_string)
'goodbye my friend'
>>> re.sub(r'^(\s*(?:\S+\s+){1})\S+', r'\1'+new_word, my_string)
'hello goodbye friend'
>>> re.sub(r'^(\s*(?:\S+\s+){2})\S+', r'\1'+new_word, my_string)
'hello my goodbye'

Just replace the number within curly braces with the position of the word you want to replace - 1. ie, for to replace the first word, the number would be 0, for second word the number would be 1, likewise it goes on.

Upvotes: 0

martineau
martineau

Reputation: 123423

You could use a generator expression and the string join() method:

my_string = "hello my friend"
nth = 0
new_word = 'goodbye'

print(' '.join(word if i != nth else new_word
                for i, word in enumerate(my_string.split(' '))))

Output:

goodbye my friend

Upvotes: 0

MervS
MervS

Reputation: 5902

A solution involving list comprehension:

text = "To be or not to be, that is the question"
replace = 6
replacement = 'it'
print ' '.join([x if index != replace else replacement for index,x in enumerate(s.split())])

The above produces:

To be or not to be, it is the question

Upvotes: 0

dgsleeps
dgsleeps

Reputation: 700

I guess you may do something like this:

nreplace=1
my_string="hello my friend"
words=my_string.split(" ")
words[nreplace]="your"
" ".join(words)

Here is another way of doing the replacement:

nreplace=1
words=my_string.split(" ")
" ".join([words[word_index] if word_index != nreplace else "your" for word_index in range(len(words))])

Upvotes: 3

Zach Gates
Zach Gates

Reputation: 4130

Let's say your string is:

my_string = "This is my test string."

You can split the string up using split(' ')

my_list = my_string.split()

Which will set my_list to

['This', 'is', 'my', 'test', 'string.']

You can replace the 4th list item using

my_list[3] = "new"

And then put it back together with

my_new_string = " ".join(my_list)

Giving you

"This is my new string."

Upvotes: 0

Related Questions