一尘不染

替换字符串中子字符串的第n次出现

python

我想替换字符串中第n个出现的子字符串。

一定有什么我想做的事情是

mystring.replace("substring", 2nd)

最简单,最Python化的方法是什么?

为什么不重复:
我不想在这种方法中使用正则表达式,而我发现的类似问题的大多数答案只是正则表达式剥离或真正复杂的功能。我真的想要尽可能简单而不是正则表达式的解决方案。


阅读 221

收藏
2020-12-20

共1个答案

一尘不染

我使用简单的函数,该函数列出所有出现的事件,选择第n个位置,并使用它将原始字符串分成两个子字符串。然后,它替换第二个子字符串中的第一个匹配项,并将子字符串连接回新的字符串中:

import re

def replacenth(string, sub, wanted, n):
    where = [m.start() for m in re.finditer(sub, string)][n-1]
    before = string[:where]
    after = string[where:]
    after = after.replace(sub, wanted, 1)
    newString = before + after
    print(newString)

对于这些变量:

string = 'ababababababababab'
sub = 'ab'
wanted = 'CD'
n = 5

输出:

ababababCDabababab

笔记:

where变量实际上是匹配项位置的列表,您可以在其中找到第n个。但是列表项索引0通常以开头,而不是以开头1。因此,有一个n-1索引,n变量是实际的第n个子字符串。我的示例找到第5个字符串。如果您使用nindex并想找到第5位,则需要n4。您通常使用哪种功能取决于生成我们的函数n

这应该是最简单的方法,但可能不是最Python的方法,因为where变量构造需要导入re库。也许有人会发现更多的Python方式。

来源和一些链接:

* where构造:如何查找所有出现的子串?
* 字符串分割:https : //www.daniweb.com/programming/software-
development/threads/452362/replace-nth-occurrence-of-any-sub-string-in-a-
string
* 类似的问题:查找字符串中子字符串的第n次出现

2020-12-20