Мне нужен способ, чтобы моя функция принимала строку во время выполнения и удаляла обратную косую черту, СОХРАНЯЯ символ, к которому она добавляется. Так что для \ a я должен получить. Это также должно работать для неэкранированных символов, таких как \ e -> e.
Я просмотрел inte rnet в поисках общего решения этой проблемы, но, похоже, его нет. Лучшее решение, которое я нашел, использует словарь для создания строки с нуля, например: Как предотвратить автоматическое c экранирование специальных символов в Python
escape_dict={'\a':r'\a',
'\b':r'\b',
'\c':r'\c',
'\f':r'\f',
'\n':r'\n',
'\r':r'\r',
'\t':r'\t',
'\v':r'\v',
'\'':r'\'',
'\"':r'\"',
'\0':r'\0',
'\1':r'\1',
'\2':r'\2',
'\3':r'\3',
'\4':r'\4',
'\5':r'\5',
'\6':r'\6',
'\7':r'\7',
'\8':r'\8',
'\9':r'\9'}
def raw(text):
"""Returns a raw string representation of the string"""
new_string=''
for char in text:
try:
new_string += escape_dict[char]
except KeyError:
new_string += char
return new_string
Однако это не удается в общем из-за конфликтов между escape-числами и escape-буквами. Использование чисел 3 di git, таких как \ 001 вместо \ 1, также не срабатывает, потому что вывод будет содержать дополнительные числа, что противоречит цели. Надо просто убрать бэксла sh. Другие предлагаемые решения, основанные на кодировках, подобных найденному здесь Обработка управляющих последовательностей в строке в Python
, также не работает, потому что это просто преобразует escape-символы в шестнадцатеричный код. \ a преобразуется в \ x07. Даже если это каким-то образом удалить, символ a все равно будет утерян.