python3用单反斜杠代替双反斜杠

2024-10-02 08:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将python3中的\\替换为复杂字符串中的\。我知道这个问题已经被问过好几次了,但是大多数时间都是针对简单字符串的,所以没有一个(公认的)答案真正适用于复杂字符串。在

这也与this one不同,后者可以用.decode('unicode_escape')来解决问题,但对这个问题不起作用。见下文。在

假设字符串为:

my_str = '\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'

直接的方法是:

^{pr2}$

这导致:

SyntaxError: EOL while scanning string literal


answer建议使用:

my_str.replace('\\\\','\\')

结果是:

'\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'

所以,没有变化。在


answer表明:

b = bytes(my_str, encoding='utf-8')
b.decode('unicode-escape')

但这对如此复杂的字符串不起作用:

UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 49-50: truncated \xXX escape


使用解码(如建议的here)会导致:

my_str.decode('unicode_escape')

AttributeError: 'my_str' object has no attribute 'decode'


使用unicode_esacpe进行编码和解码的组合将返回一个完全不同的字符串(可能是由于使用了utf-16,但是{}会导致错误,请参见上文。另外,例如latin1不起作用):

my_str.encode('utf-16').decode('unicode_escape')
'ÿþ\\\x00x\x00a\x005\x00\\\x00x\x00c\x000\x00\\\x00x\x00e\x006\x00a\x00K\x00\\\x00x\x00f\x009\x00\\\x00x\x008\x000\x00\\\x00x\x00b\x001\x00\\\x00x\x00c\x008\x00*\x00\x01\x00\x12\x00$\x00\\\x00x\x00f\x00b\x00p\x00\x1e\x00(\x004\x00\\\x00x\x00d\x006\x00{\x00;\x00Z\x00\\\x00x\x00'


Tags: 字符串myunicodeutfdecodex00x01str
2条回答

如果你这么做的话

s  = '\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'

s = s.replace('\\','\')

print(s)

你得到了

^{pr2}$

因为在'\'中\转义了'。你的绳子开着。在

你没有任何双精度的s-它只是显示了它本身,如果你检查它,就要把它与用来逃逸的\区分开来。在

如果你print(s)你得到\xa5\xc0\xe6aK\xf9\x80\xb1\xc8*$\xfbp(4\xd6{;Z\x

仔细看看这串线,它们都是单斜线。在

In [26]: my_str[0]
Out[26]: '\\'

In [27]: my_str[1]
Out[27]: 'x'

In [28]: len(my_str[0])
Out[28]: 1

并且my_str.replace('\\','\')不起作用,因为这里的令牌是\',它转义',并等待另一个结束'
请改用my_str.replace('\\', '')


更新:再过几天,我意识到下面的讨论可能也有帮助。如果带有转义符('\\x''\\u')的字符串的内涵最终是十六进制/unicode文本,则可以通过escape_decode对它们进行解码。在

^{pr2}$

相关问题 更多 >

    热门问题