为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3146593 2021-09-11 10:44:05
目前,我正在解析简历以仅在每行开头使用时删除“-”。我尝试在文本拆分后识别每个字符串的第一个字符。下面是我的代码:for line in text.split('\n'):    if line[0] == "-":        line[0] = line.replace('-', ' ')行是一个字符串。这是我的思考方式,但每次运行时,我都会收到错误消息IndexError: string index out of range。我不确定为什么,因为它是一个字符串,所以应该识别第一个元素。谢谢!
查看完整描述

2 回答

?
LEATH

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

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


查看完整回答
反对 回复 2021-09-11
?
繁星淼淼

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


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信