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

目前,我正在解析简历以仅在每行开头使用时删除“-”。我尝试在文本拆分后识别每个字符串的第一个字符。下面是我的代码:


for line in text.split('\n'):

    if line[0] == "-":

        line[0] = line.replace('-', ' ')

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


慕妹3146593
浏览 227回答 2
2回答

LEATH

您遇到的问题是因为某些行是空的。那么你的替换是错误的:首先,因为它将分配该行的第一个“字符”,但您不能更改字符串,因为它是不可变的第二,因为替换值是整个字符串减去一些破折号第三个是因为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))结果:helloyes--who are you有了更多的经验,你可以把这段代码打包成一个列表推导式:new_text = "\n".join([line[1:] if line.startswith("-") else line for line in text.splitlines()])最后,正则表达式模块也是一个不错的选择:import reprint(re.sub("^-","",text,flags=re.MULTILINE))这将删除所有以破折号开头的行上的破折号。多行标志告诉正则表达式引擎将其视为^行的开始,而不是缓冲区的开始。

繁星淼淼

这可能是由于空行。您可以在获取索引之前检查长度。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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python