![](/img/trans.png)
[英]Replace all occurrences of the substring using slicing when size of replacement string the differs from 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.