替换字符串第一个字母的Python代码:String Index E

2024-06-02 08:30:59 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正在分析resumes,只在每行开头使用“-”时才删除它。我试着在文本被拆分后识别每个字符串的第一个字符。以下是我的代码:

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

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


Tags: 字符串代码textin文本forif错误
2条回答

这可能是由于空行。你可以在取索引之前先检查一下长度。在

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

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

那么你的替代者就错了:

  • 首先,因为它将指定行的第一个“字符”,但不能更改字符串,因为它是不可变的
  • 第二个原因是替换值是整个字符串减去一些短划线
  • 第三个原因是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))

结果:

^{pr2}$

有了更多的经验,您可以将此代码打包到列表理解中:

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

这将删除以破折号开头的所有行上的短划线。Multiline标志告诉regex引擎将^作为行的开始,而不是缓冲区的开始。在

相关问题 更多 >