首页 文章

Python代码替换字符串的第一个字母:字符串索引错误

提问于
浏览
1

目前,我正在解析简历,只有在每行的开头使用时才删除“ - ” . 我已经尝试在分割文本后识别每个字符串的第一个字符 . 以下是我的代码:

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

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

2 回答

  • 0

    你得到的问题是因为有些行是空的 .

    那你的替换是错的:

    首先

    • 因为它将分配行的第一个"character"但是你不能更改字符串,因为它是不可变的

    • 秒因为替换值是整个字符串减去一些破折号

    • 第三,因为 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))
    

    这将删除以dash开头的所有行的短划线 . 多行标志告诉正则表达式引擎将 ^ 视为行的开头,而不是缓冲区的开头 .

  • 4

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

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

相关问题