【发布时间】: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