云烟成雨 发表于 2023-2-18 16:19

python字符串替换的问题

问题例子如下:原字符串:abc{s1}123{s2}efg
我想把以字符{s1}开头,以字符串{s2}结尾的中间的字符串123替换成888,应该怎么写?

sgbyg 发表于 2023-2-18 16:20

本帖最后由 sgbyg 于 2023-2-18 16:24 编辑

print(re.sub(r'{s1}123{s2}', '{s1}888{s2}', 'abc{s1}123{s2}efg'))

layuai 发表于 2023-2-18 16:33

用正则表达式替换

wangwei0511 发表于 2023-2-18 16:51

您可以使用 Python 的字符串方法 find() 和 replace() 来实现这个任务。以下是一种可能的实现方法:
s = "abc{s1}123{s2}efg"
s1 = "{s1}"
s2 = "{s2}"
start = s.find(s1) + len(s1)
end = s.find(s2)
if start > 0 and end > 0 and end > start:
    s = s[:start] + "888" + s
print(s)


在这个示例代码中,我们先定义了原始字符串 s,以及要查找和替换的子字符串 {s1} 和 {s2}。然后,我们使用字符串方法 find() 来查找 {s1} 和 {s2} 在原始字符串中的位置,这可以帮助我们确定要替换的子字符串的起始位置和结束位置。如果找到了 {s1} 和 {s2} 并且它们之间有其他字符,我们使用字符串切片和 replace() 方法将 123 替换为 888。最后,我们打印输出替换后的字符串。

注意,这个实现方法只会替换第一个匹配到的子字符串 {s1} 和 {s2} 之间的内容。如果您想替换多个匹配,可以考虑使用 while 循环和字符串方法 find() 来反复查找和替换,直到没有更多匹配为止。

xiaoxiaodeniao 发表于 2023-2-18 16:59

本帖最后由 xiaoxiaodeniao 于 2023-2-18 17:00 编辑

a=‘abc{s1}123{s2}efg’
a=‘abc{s1}888{s2}efg’
{:1_918:}{:1_918:}
替换好了,拿去用吧

bj201809 发表于 2023-2-18 16:59

import re

init_str = "abc{s1}123{s2}efg"
aim_value = "{s1}目标值{s2}"

res_str = re.sub(r"{s1}.*?{s2}",aim_value,init_str)

print(res_str)

wangwei0511 发表于 2023-2-18 17:07

wangwei0511 发表于 2023-2-18 16:51
您可以使用 Python 的字符串方法 find() 和 replace() 来实现这个任务。以下是一种可能的实现方法:
s = " ...

咋不允许照搬,这个是对的就可以啊

yhlg 发表于 2023-2-18 17:13

wangwei0511 发表于 2023-2-18 17:07
咋不允许照搬,这个是对的就可以啊

同意,为什么那么抗拒chatgpt,对就行了!

DaveBoy 发表于 2023-2-18 20:43

wangwei0511 发表于 2023-2-18 17:07
咋不允许照搬,这个是对的就可以啊

【公告】禁止使用ChatGPT或其他类似AI的答案作为解答回复

云烟成雨 发表于 2023-2-19 11:04

sgbyg 发表于 2023-2-18 16:20
print(re.sub(r'{s1}123{s2}', '{s1}888{s2}', 'abc{s1}123{s2}efg'))

感谢,可用
页: [1] 2
查看完整版本: python字符串替换的问题