Python:替换反斜杠以避免字符串中的转义序列

时间:2016-02-19 10:45:23

标签: python string escaping python-2.x

我试图用双反斜杠替换我在一个字符串中得到的单个反斜杠,因为有时“反斜杠+字符”组合会创建一个转义序列。我尝试了各种方法(主要来自其他stackoverflow问题),但到目前为止,没有任何方法能让我获得正确的结果。

示例s = "\aa, \bb, \cc, \dd"

string.replace(s,"\\","\\\\")

用特殊字符替换第一个a和b(这里不能粘贴确切的结果吗?):

@a,@b,\\cc,\\dd
print s.encode("string_escape")

产生

\x07a,\x08b,\\cc,\\dd

(“unicode-escape”相同)

使用此function

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 text"""
    new_string=''
    for char in text:
        try: new_string+=escape_dict[char]
        except KeyError: new_string+=char
    return new_string

产生

\7a,\bb,\cc,\dd

并使用此function

import re
import codecs

ESCAPE_SEQUENCE_RE = re.compile(r'''
    ( \\U........      # 8-digit hex escapes
    | \\u....          # 4-digit hex escapes
    | \\x..            # 2-digit hex escapes
    | \\[0-7]{1,3}     # Octal escapes
    | \\N\{[^}]+\}     # Unicode characters by name
    | \\[\\'"abfnrtv]  # Single-character escapes
    )''', re.UNICODE | re.VERBOSE)

def decode_escapes(s):
    def decode_match(match):
        return codecs.decode(match.group(0), 'unicode-escape')

    return ESCAPE_SEQUENCE_RE.sub(decode_match, s)

再次返回带有特殊字符的字符串

 @a,@b,\\cc,\\dd

我需要转换的实际字符串类似于"GroupA\Group2\Layer1"

1 个答案:

答案 0 :(得分:2)

总的来说,我同意克劳斯的评论。虽然这并不总是可能的。

快速回答是你可以这样做:r'\ aa,\ bb,\ cc,\ dd'。

我找到了更多信息here

如果不可能的话,不太满意的答案就是你这样替换:

s = '\aa, \bb, \cc, \dd'
string.replace(s,"\x07","\\a")