Код Python для замены первой буквы строки: ошибка индекса строки - PullRequest
0 голосов
/ 08 декабря 2018

В настоящее время я работаю над анализом резюме, чтобы удалить «-» только тогда, когда он используется в начале каждой строки.Я попытался определить первый символ каждой строки после разделения текста.Ниже мой код:

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

строка является строкой.Это мой способ мышления, но каждый раз, когда я запускаю это, я получаю ошибку IndexError: string index out of range.Я не уверен, почему, потому что, поскольку это строка, первый элемент должен быть распознан.Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

это может быть связано с пустыми строками.Вы можете просто проверить длину, прежде чем брать индекс.

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))
0 голосов
/ 08 декабря 2018

Проблема, которую вы получаете, заключается в том, что некоторые строки пусты.

Тогда ваша замена неверна:

  • first, потому что она назначит первый «символ» строкино вы не можете изменить строку, потому что она неизменна
  • секунда, потому что значением замены является вся строка минус несколько штрихов
  • треть, потому что 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))

это удаляет дефис во всех строках, начинающихся с дефиса.Многострочный флаг указывает механизму регулярных выражений, что ^ следует рассматривать как начало строки, а не как начало буфера.

...