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

发布于 2021-01-29 19:35:42

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

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

mystring.replace("substring", 2nd)

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

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

关注者
0
被浏览
93
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    我使用简单的函数,该函数列出所有出现的事件,选择第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次出现



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看