社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

aznxpress4men • 5 年前 • 1308 次点击  

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

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43490
 
1308 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Gaurang Shah
Reply   •   1 楼
Gaurang Shah    6 年前

这可能是因为空行。你可以先检查一下长度再做索引。

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))
Jean-François Fabre
Reply   •   2 楼
Jean-François Fabre    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))

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