2 回答

TA贡献1936条经验 获得超6个赞
您遇到的问题是因为某些行是空的。
那么你的替换是错误的:
首先,因为它将分配该行的第一个“字符”,但您不能更改字符串,因为它是不可变的
第二,因为替换值是整个字符串减去一些破折号
第三个是因为
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))
添加回答
举报