有没有办法从给定的子字符串开始替换字符串的结尾

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

我有字符串 banana | 10,想用 9 替换从 | 到字符串末尾的所有内容。我想要的输出是 banana | 9。我怎么能做到这一点?我查看了 .replace().split() 并将字符串转换为字符列表,并遍历它们直到找到应该替换的位,但就是无法弄清楚。

我建议你使用 re 模块(正则表达式模块):

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

输出

banana | 9

也许这行得通。 代码:

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

banana | 9

其他 regex 解决方案更优雅,但这更具可读性。你可以决定什么更适合你。

您可以在第 1 组中捕获 | 后跟不带换行符的可选空格,并匹配要删除的行的其余部分。

在替换中使用捕获组 1,然后是 9

import re

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

输出

banana | 9

如果要匹配数字和至少 1 个或多个空格,请使用:

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

看到一个regex 101 demo

您可能想使用 split() 方法... 这将有助于您理解该方法。

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

逻辑或许可以改进,但像这样的东西可能会起作用:

text = "banana | 10"

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