使用 itertools 出现第 n 个子字符串

问题描述 投票:0回答:2

我正在尝试编写一个返回字符串的函数,其中第 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

python regex python-itertools
2个回答
0
投票

尝试:

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

0
投票

我猜你想从后面更换。

如果是这样的话,您可以简单地使用

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))


© www.soinside.com 2019 - 2024. All rights reserved.