user3449872
user3449872

Reputation: 35

Replace string is not changing value

I am trying to replace any i's in a string with capital I's. I have the following code:

str.replace('i ','I ')

However, it does not replace anything in the string. I am looking to include a space after the I to differentiate between any I's in words and out of words.

Thanks if you can provide help!

The exact code is:

new = old.replace('i ','I ')
new = old.replace('-i-','-I-')

Upvotes: 0

Views: 132

Answers (2)

Ashwini Chaudhary
Ashwini Chaudhary

Reputation: 251186

I think you need something like this.

>>> import re
>>> s = "i am what i am, indeed."
>>> re.sub(r'\bi\b', 'I', s)
'I am what I am, indeed.'

This only replaces bare 'i''s with I, but the 'i''s that are part of other words are left untouched.

For your example from comments, you may need something like this:

>>> s = 'i am sam\nsam I am\nThat Sam-i-am! indeed'
>>> re.sub(r'\b(-?)i(-?)\b', r'\1I\2', s)
'I am sam\nsam I am\nThat Sam-I-am! indeed'

Upvotes: 1

roippi
roippi

Reputation: 25974

new = old.replace('i ','I ')
new = old.replace('-i-','-I-')

You throw away the first new when you assign the result of the second operation over it.

Either do

new = old.replace('i ','I ')
new = new.replace('-i-','-I-')

or

new = old.replace('i ','I ').replace('-i-','-I-')

or use regex.

Upvotes: 2

Related Questions