替换字符串中重复的单词(python)

时间:2017-07-15 09:28:59

标签: python string

我希望能够更换每一个“你好”。在一个字符串中的新词'一度。

在第一个输出中:

' Hello word word new word word word word hello' 

第一个问候语只会被替换。

在第二个输出中:

'Hello word word hello word word word new word'

第二个你好只会被替换。

例如:

l = ' Hello word word hello word word word hello'

w = 'hello'

l=l.replace(w,'newword',1)

上面的代码只是替换了第一个问候。

如何在保留第一个问候语的情况下替换第二个hello。 是否有任何方法可以通过(索引)来做到这一点?

感谢您的帮助和提示。

2 个答案:

答案 0 :(得分:1)

您可以将句子拆分为其组成单词,并仅替换给定计数的单词,并将计数保持为itertools.count

from itertools import count

def replace(s, w, nw, n=1):
    c = count(1)
    return ' '.join(nw if x==w and next(c)==n else x for x in s.split())

s = ' Hello word word hello word word word hello'

print replace(s, 'hello', 'new word')
# Hello word word new word word word word hello

print replace(s, 'hello', 'new word', n=2)
# Hello word word hello word word word new word

只要您替换由空格分隔的单词而不是任意子串,这应该可行。

答案 1 :(得分:1)

您可以迭代地找到下一个匹配项的索引, 从上一次出现的索引开始。 获得要替换的事件的起始索引后, 你可以在该索引之前取字符串的前缀, 并对后缀应用1替换。 返回前缀和替换后缀的串联。

def replace_nth(s, word, replacement, n):
    """
    >>> replace_nth("Hello word word hello word word word hello", "hello", "rep", 1)
    'Hello word word rep word word word hello'

    >>> replace_nth("Hello word word hello word word word hello", "hello", "rep", 2)
    'Hello word word hello word word word rep'

    >>> replace_nth("Hello word word hello word word word hello", "hello", "rep", 3)
    'Hello word word hello word word word hello'

    >>> replace_nth("", "hello", "rep", 3)
    ''

    """
    index = -1
    for _ in range(n):
        try:
            index = s.index(word, index + 1)
        except ValueError:
            return s

    return s[:index] + s[index:].replace(word, replacement, 1)