【问题标题】:Python: Replacing backslashes to avoid escape sequences in stringPython:替换反斜杠以避免字符串中的转义序列
【发布时间】:2016-02-19 10:45:23
【问题描述】:

我试图用双反斜杠替换字符串中的单个反斜杠,因为有时“反斜杠+字符”组合会创建转义序列。我尝试了各种方法(主要来自其他 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"

【问题讨论】:

  • 如果您在输入数据中遇到转义序列问题,您实际上应该在源头修复该数据。
  • 谢谢,我不确定(如何)我可以更改输入,因为它是工具参数(arcgis 中的值表)的字符串输出,我需要字符串表示。我的问题或多或少,为什么上述任何一种方法都不适用于一般示例?

标签: python string escaping python-2.x


【解决方案1】:

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

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

我找到了更多信息here

如果不可能的话,不太高兴的答案是您这样做:

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

【讨论】:

  • 谢谢,我想我可以暂时使用“不太满意的答案”作为解决方法。
猜你喜欢
  • 2017-02-28
  • 2011-02-22
  • 2011-08-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2016-08-30
相关资源
最近更新 更多