Удаление backsla sh в Python во время выполнения - PullRequest
6 голосов
/ 13 июля 2020

Мне нужен способ, чтобы моя функция принимала строку во время выполнения и удаляла обратную косую черту, СОХРАНЯЯ символ, к которому она добавляется. Так что для \ 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 все равно будет утерян.

...