替换字符串首字母的Python代码:字符串索引错误

时间:2018-12-08 20:18:30

标签: python string character

当前,我正在分析简历,以便仅在每行的开头使用“-”时才删除它。在分割文本之后,我尝试标识每个字符串的第一个字符。下面是我的代码:

for line in text.split('\n'):
    if line[0] == "-":
        line[0] = line.replace('-', ' ')

line是一个字符串。这是我的思维方式,但是每次运行此命令时,都会收到错误IndexError: string index out of range。我不确定为什么,因为因为它是一个字符串,所以应该识别第一个元素。谢谢!

2 个答案:

答案 0 :(得分:4)

您遇到的问题是因为某些行是空的。

那么您的替换错误:

  • first,因为它将分配该行的第一个“字符”,但是您不能更改字符串,因为它是不可变的
  • 秒,因为替换值是整个字符串减去一些破折号
  • 第三,因为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))

这将删除所有以破折号开头的破折号。多行标志告诉正则表达式引擎将^视为行的开始,而不是缓冲区的开始。

答案 1 :(得分:0)

这可能是由于空白行。您可以在获取索引之前检查长度。

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))