2 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
您遇到的問題是因?yàn)槟承┬惺强盏摹?/p>
那么你的替換是錯(cuò)誤的:
首先,因?yàn)樗鼘⒎峙湓撔械牡谝粋€(gè)“字符”,但您不能更改字符串,因?yàn)樗遣豢勺兊?/p>
第二,因?yàn)樘鎿Q值是整個(gè)字符串減去一些破折號(hào)
第三個(gè)是因?yàn)?code>line在下一次迭代中丟失了。順便說一下,原始行列表也是如此。
如果要?jiǎng)h除字符串的第一個(gè)字符,不需要replace
,只需將字符串切片(不要冒險(xiǎn)刪除其他類似字符)。
一個(gè)可行的解決方案是測(cè)試startswith
并重建一個(gè)新的字符串列表。然后再加入
text = """hello
-yes--
who are you"""
new_text = []
for line in text.splitlines():
if line.startswith("-"):
line = line[1:]
new_text.append(line)
print("\n".join(new_text))
結(jié)果:
hello
yes--
who are you
有了更多的經(jīng)驗(yàn),你可以把這段代碼打包成一個(gè)列表推導(dǎo)式:
new_text = "\n".join([line[1:] if line.startswith("-") else line for line in text.splitlines()])
最后,正則表達(dá)式模塊也是一個(gè)不錯(cuò)的選擇:
import re
print(re.sub("^-","",text,flags=re.MULTILINE))
這將刪除所有以破折號(hào)開頭的行上的破折號(hào)。多行標(biāo)志告訴正則表達(dá)式引擎將其視為^行的開始,而不是緩沖區(qū)的開始。

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
這可能是由于空行。您可以在獲取索引之前檢查長(zhǎng)度。
new_text = []
text="-testing\nabc\n\n\nxyz"
for line in text.split("\n"):
if line and line[0] == '-':
line = line[1:]
new_text.append(line)
print("\n".join(new_text))
添加回答
舉報(bào)