#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"
В этом строковом литерале любые символы за пределами скобки не были экранированы, и вам следует подумать, хотите ли вы, чтобы они были удалены.