当前,我正在分析简历,以便仅在每行的开头使用“-”时才删除它。在分割文本之后,我尝试标识每个字符串的第一个字符。下面是我的代码:
for line in text.split('\n'):
if line[0] == "-":
line[0] = line.replace('-', ' ')
line是一个字符串。这是我的思维方式,但是每次运行此命令时,都会收到错误IndexError: string index out of range
。我不确定为什么,因为因为它是一个字符串,所以应该识别第一个元素。谢谢!
答案 0 :(得分:4)
您遇到的问题是因为某些行是空的。
那么您的替换错误:
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))