Is there a way to replace the end of a string, starting at a given substring

Viewed 92

I have the string banana | 10 and want to replace everything from | to the end of the string with 9. The output I want would be banana | 9. How could I achieve this? I've looked into .replace(), .split() and converting the string into a list of characters, and looping over them until I find the bit that should be replaced, but just couldn't figure it out.

6 Answers

I suggest you use re module(regex module):

import re
myString = "banana | 10"
re.sub(r"\|.+", r"| 9", myString)

Output

banana | 9
yourStr = 'banana | 10'
yourStr = yourStr[:yourStr.index('|') + 2] + '9'
print(yourStr)

banana | 9

The other regex solutions are more elegant, but this is more readable. You can decide what better suits you.

Maybe this can work. Code:

string = 'banana | 10 ';
pos = string.find('|')
left_string = string[:pos+2];
final_string = left_string + '9'
print(final_string)

You can capture | followed by optional spaces without a newline in group 1, and match the rest of the line that is to be removed.

In the replacement use capture group 1 followed by 9

import re

s = "banana | 10"
pattern = r"(\|[^\S\n]*).*"
print(re.sub(pattern, r"\g<1>9", s))

Output

banana | 9

If you want to match digits and at least 1 or more spaces, then use:

(\|[^\S\n]+)\d+

See a regex 101 demo

You may want to use split() method... This would be helpful for you to understand the method.

sep = ' | '
new_value = 9
s ='banana | 10'.split(sep=sep)
print( s[0] + sep + str(new_value))

The logic can probably be improved but something like this might work:

text = "banana | 10"

if "|" in text:
   tmp = text.split("|")
   print (tmp[0] + "| 9")
Related