我正在尝试编写一个返回字符串的函数,其中第 n 个子字符串被新的子字符串替换:
我尝试了以下方法:
import re
from itertools import count
text = "Hello_Dear_Today_is_Nice_Today_is_Nice"
def replace_nth(text, sub, rep_sub, n):
c = count(0)
res = re.sub(r"{}".format(sub), lambda x: rep_sub if next(c) == n else x.group(), text)
return res
print(replace_nth(text, "Today", "Today_2", 2))
但是返回的字符串是一样的,我做错了什么?
我期待:
结果Hello_Dear_Today_is_Nice_Today_2_is_Nice
尝试:
import re
from itertools import islice
def replace_nth(text, sub, rep_sub, n):
r = re.finditer(re.escape(sub), text)
for m in islice(r, n - 1, n):
text = f"{text[:m.start()]}{rep_sub}{text[m.end():]}"
break
return text
text = "Hello_Dear_Today_is_Nice_Today_is_Nice"
print(replace_nth(text, "Today", "Today_2", 2))
打印:
Hello_Dear_Today_is_Nice_Today_2_is_Nice
我猜你想从后面更换。
如果是这样的话,您可以简单地使用
split()
:
text = "Hello_Dear_Today_is_Nice_Today_is_Nice"
def replace_nth(text, sub, rep_sub, n):
s = text.split('_')
s[-n - 1] = rep_sub
return '_'.join(s)
print(replace_nth(text, "Today", "Today_2", 2))