簡體   English   中英

使用字符串切片替換字符串中所有出現的 substring

[英]Replace all occurrences of the substring in string using string slicing

我想替換字符串中所有出現的 substring,但我不希望使用替換方法。 目前,實驗使我想到了這一點:

def count_substrings_and_replace(string, substring, rpl=None):
    string_size = len(string)
    substring_size = len(substring)
    count = 0
    _o = string
    for i in range(0, string_size - substring_size + 1):
        if string[i:i + substring_size] == substring:
            if rpl:
                print(_o[:i] + rpl + _o[i + substring_size:])
            count += 1
    return count, _o

count_substrings_and_replace("aaabaaa", "aaa", "ddd")

但我有這樣的 output :

dddbaaa
aaabddd

不是dddbddd

更新 1:

我發現我只能用相同長度的 substring 的字符串正確替換。 例如對於count_substrings_and_replace("aaabaaa", "aaa", "d")我得到 output: (2, 'dbaad') not dbd

更新 2:

更新 1中描述的問題確實出現了,因為字符串與原始字符串( line 8 )的比較在整個過程中不會發生變化。

固定的:

def count_substrings_and_replace(string, substring, rpl=None):
    string_size = len(string)
    substring_size = len(substring)
    count = 0
    _o = string
    for i in range(0, string_size - substring_size + 1):
        if _o[i:i + substring_size] == substring:
            if rpl:
                _o = _o[:i] + rpl + _o[i + substring_size:]
            count += 1
    return count, _o

count_substrings_and_replace("aaabaaa", "aaa", "d")

Output: (2, dbd)

只是我的錯誤。 我必須在每次迭代時將值傳遞給變量而不是打印:

_o = _o[:i] + rpl + _o[i + substring_size:]

當找到匹配項時,您永遠不會更新 _o 的值,您只是打印出它被替換后的樣子。 相反,在最里面的 if 語句應該是兩行,如:

_o = _o[:i] + rpl + _o[i + substring_size:]
print(_o)

這將在每次找到並替換匹配項時打印字符串,將打印語句移動到 for 循環之后運行將使其僅在整個字符串被正確解析和替換后運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM