2 回答

TA貢獻1936條經驗 獲得超7個贊
您遇到的問題是因為某些行是空的。
那么你的替換是錯誤的:
首先,因為它將分配該行的第一個“字符”,但您不能更改字符串,因為它是不可變的
第二,因為替換值是整個字符串減去一些破折號
第三個是因為
line
在下一次迭代中丟失了。順便說一下,原始行列表也是如此。
如果要刪除字符串的第一個字符,不需要replace
,只需將字符串切片(不要冒險刪除其他類似字符)。
一個可行的解決方案是測試startswith
并重建一個新的字符串列表。然后再加入
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))
結果:
hello
yes--
who are you
有了更多的經驗,你可以把這段代碼打包成一個列表推導式:
new_text = "\n".join([line[1:] if line.startswith("-") else line for line in text.splitlines()])
最后,正則表達式模塊也是一個不錯的選擇:
import re
print(re.sub("^-","",text,flags=re.MULTILINE))
這將刪除所有以破折號開頭的行上的破折號。多行標志告訴正則表達式引擎將其視為^行的開始,而不是緩沖區的開始。

TA貢獻1775條經驗 獲得超11個贊
這可能是由于空行。您可以在獲取索引之前檢查長度。
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))
添加回答
舉報