簡體   English   中英

替換字符串首字母的Python代碼:字符串索引錯誤

[英]Python Code to Replace First Letter of String: String Index Error

目前,我正在分析簡歷,以僅在每行的開頭使用“-”時才將其刪除。 在分割文本之后,我嘗試標識每個字符串的第一個字符。 下面是我的代碼:

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

line是一個字符串。 這是我的想法,但是每次運行此命令時,都會出現錯誤IndexError: string index out of range 我不確定為什么,因為因為它是一個字符串,所以應該識別第一個元素。 謝謝!

您遇到的問題是因為某些行是空的。

那么您的替換是錯誤的:

  • 首先是因為它將分配該行的第一個“字符”,但是您不能更改字符串,因為它是不可變的
  • 第二個原因是替換值是整個字符串減去一些破折號
  • 第三,因為在下一次迭代中丟失了line 順便說一句,原始的行列表也是如此。

如果要刪除字符串的第一個字符,則不需要replace ,只需對字符串進行切片即可(不要冒險刪除其他類似的字符)。

一個startswith解決方案是使用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))

這將刪除所有以破折號開頭的破折號。 多行標志告訴正則表達式引擎將^視為行的開始,而不是緩沖區的開始。

這可能是由於空行。 您可以在獲取索引之前檢查長度。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM