Python:替换反斜杠以避免字符串中的转义序列
Python: Replacing backslashes to avoid escape sequences in string
我正在尝试用双反斜杠替换字符串中的单反斜杠,因为有时 "backslash+character" 组合会创建一个转义序列。我尝试了各种方法(主要来自其他 Whosebug 问题),但到目前为止没有得到正确的结果。
示例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'\"',
'[=15=]':r'[=15=]',
'':r'',
'':r'',
'':r'',
'':r'',
'':r'',
'':r'',
'':r'',
'':r'',
'':r''}
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
产生
a,\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)
returns又是带特殊字符的字符串
@a,@b,\cc,\dd
我需要转换的实际字符串类似于 "GroupA\Group2\Layer1"
总的来说,我同意克劳斯的评论。虽然这并不总是可能的。
快速回答是您可以这样做:r'\aa, \bb, \cc, \dd'。
我找到了更多信息here。
如果不可能的话,不太高兴的答案是你这样做你的替换:
s = '\aa, \bb, \cc, \dd'
string.replace(s,"\x07","\a")
我正在尝试用双反斜杠替换字符串中的单反斜杠,因为有时 "backslash+character" 组合会创建一个转义序列。我尝试了各种方法(主要来自其他 Whosebug 问题),但到目前为止没有得到正确的结果。
示例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'\"',
'[=15=]':r'[=15=]',
'':r'',
'':r'',
'':r'',
'':r'',
'':r'',
'':r'',
'':r'',
'':r'',
'':r''}
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
产生
a,\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)
returns又是带特殊字符的字符串
@a,@b,\cc,\dd
我需要转换的实际字符串类似于 "GroupA\Group2\Layer1"
总的来说,我同意克劳斯的评论。虽然这并不总是可能的。
快速回答是您可以这样做:r'\aa, \bb, \cc, \dd'。
我找到了更多信息here。
如果不可能的话,不太高兴的答案是你这样做你的替换:
s = '\aa, \bb, \cc, \dd'
string.replace(s,"\x07","\a")