你得到的问题是因为有些行是空的。
那么你的替代品错了:
-
首先,因为它将指定行的第一个“字符”,但不能更改字符串,因为它是不可变的。
-
第二个原因是替换值是整个字符串减去一些破折号
-
第三是因为
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))
这将删除以破折号开头的所有行上的破折号。多行标志告诉正则表达式引擎要考虑
^
作为行的开始,而不是缓冲区的开始。