Удаление экранированных символов, таких как новая строка, табуляции, возврат каретки и т.д. Внутри строки

#python #nlp #nltk

#python #nlp #nltk

Вопрос:

Как я могу удалить экранированные и экранированные экранированные новые строки, возврат каретки табуляции и т. Д.?

 sentence = "ndirty string n \n \\n t\t\\t r\r\\r"
  

Классический подход грубой силы заключается в том, чтобы

 " ".join(sentence.split())
  

но экранированные символы остаются:

 "dirty string \n \\n \t\\t \r\\r"
  

как я могу преобразовать свою строку так, чтобы она выглядела так:

 "dirty string"
  

Ответ №1:

While, например, n является escape-символом, \n не является. Вот почему у вас остаются строки, подобные \n \\n \t\\t \r\\r after sentence.split() .

Это вернет желаемый результат:

 result=" ".join(word for word in sentence.split() if not word.startswith("\"))
  

Он разбивает предложение на слова, удаляя любые начальные или конечные пробелы, но учитывает только слова, которые не начинаются с обратной косой черты. Помните, что такие вещи, как \n не экранирующие символы, а представление буквенной строки n .

Кстати, я бы не назвал вашу попытку «грубой силой», Поскольку строковые функции, такие как split() , strip() , join() и replace() т. Д., Предназначены для решения именно такого типа проблем.

Ответ №2:

Использование шаблона регулярных выражений, такого как (\n|\r|\t|\)

Ввод:

 sentence = "ndirty string n \n \\n t\t\\t r\r\\r"
  

Стриптиз:

 import re
x = re.sub(r"(\n|\r|\t|\)", "", sentence).strip()
  

Результат:

 'dirty string'
  

Ответ №3:

 sentence = "ndirty string n \n \\n t\t\\t r\r\\r"

print(''.join(s for s in sentence if (s.isalnum() or (s == ' '))))
# Output: dirty string  n n tt rr
  

При просмотре вашего предложения некоторые буквы не были экранированы. Я заключил в квадратные скобки экранированные символы, которые я вижу:

 "(n)dirty string (n) (\)n (\)(\)n (t)(\)t(\)(\)t (r)(\)r(\)(\)r"
  

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