当前位置: 首页 > 面试题库 >

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

梁丘远航
2023-03-14
问题内容

这个问题已经在这里有了答案

Python将\\替换为\ (7个答案)

2年前关闭。

我需要在python3\\中用\复杂的字符串替换。我知道这个问题已经被问过几次了,但是大多数情况下都是针对简单的字符串,因此,(接受的)答案中的任何一个都不真正适用于复杂的字符串。

这也是 不同的 ,从这个地方的问题可以用来解决.decode('unicode_escape')这对于这个问题无法正常工作。 见下文

假设字符串为:

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

直接的方法是:

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

这导致:

SyntaxError:扫描字符串文字时停产

该答案建议使用:

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

结果是:

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

因此,没有变化。

这个答案表明:

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

但这不适用于如此复杂的字符串:

UnicodeDecodeError:’unicodeescape’编解码器无法解码位置49-50的字节:截断的\ xXX转义

利用解码(如建议在这里),其结果是:

my_str.decode('unicode_escape')

AttributeError:’my_str’对象没有属性’decode’

使用进行编码和解码的组合会unicode_esacpe返回一个完全不同的字符串(可能是由于使用了utf-16,但会utf-8导致错误,请参见上文。此外,例如,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'

问题答案:

仔细看看字符串,它们都是单斜线。

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

import codecs
print(len(b'\x32'), b'\x32')                # 1 hex literal, '\x32' == '2'
print(len(b'\\x32'), b'\\x32')              # 4 chars including escapes
print(codecs.escape_decode('\\x32', 'hex')) # chars->literal, 4->1

# 1 b'2'
# 4 b'\\x32'
# (b'2', 4)

s = '\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z'
ed, _ = codecs.escape_decode(s, 'hex')
print(len(s), s)
print(len(ed), ed)

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


 类似资料:
  • 问题内容: 我有一个字符串“ \\ u003c”,它属于UTF-8字符集。由于存在双反斜杠,因此我无法将其解码为unicode。如何从“ \\ u003c”获取“ \ u003c”?我正在使用Java。 我尝试过 但无法实现我想要的。 这是我的代码 文件的内容是 \ u003c 问题答案: 不知道您是否仍在寻找解决问题的方法(因为您已经接受了答案),但是我仍然会添加我的答案作为针对 所述问题 的可

  • 我需要将python3中的替换为复杂字符串中的。我知道这个问题已经被问了好几次,但大多数时候都是针对简单字符串,所以没有一个(接受的)答案真正适用于复杂字符串。 这也不同于使用无法解决此问题。请参见下文。 假设字符串是: 直截了当的方法是: 这导致: 语法错误:扫描字符串文字时EOL 这个答案建议使用: 这导致: 所以,没有变化。 这个答案表明: 但是对于如此复杂的字符串,这并不适用: unico

  • 问题内容: 这是一个“到底发生了什么”的问题。我实际上不需要解决方案。 我必须用双反斜杠替换字符串中的所有单反斜杠。这就是我最终要做的… …其中strRootDirectory是上面的java.lang.String。 现在,我了解了第一个参数的四个反斜杠:regex期望两个反斜杠以表示单个文字反斜杠,而Java希望它们加倍。没关系。 但是,第二个参数的八个反斜杠到底是怎么回事?替换字符串不是应该

  • 我正在尝试用单个反斜杠替换所有双反斜杠。我想将替换为。我以为python将视为一个反斜杠,将视为带有两个反斜杠的字符串。但是当我尝试时 因此,我尝试用原始字符串切换替换字符串: 这不是我需要的。所以我只尝试了原始字符串中的一个反斜杠:

  • 许多发现都是针对python2的,我的例子是python3: 我需要把双背斜线换成单背斜线 这篇文章中的“接受答案”python3用单反斜杠替换双反斜杠在这里不起作用: 那么问题出在哪里呢?非常感谢。 [更新]: 由于@ShadowRanger的回复,所以如果在替换操作后打印字符串,它是预期的,但是,在我的情况下,我需要连接替换后生成另一个变量(conn_str),正如你所看到的,它仍然显示双反斜

  • 问题内容: 我正在尝试将转换为,但是我不断遇到各种错误。我认为这是解决方案: 但这给出了以下异常: 问题答案: 将该参数解释为正则表达式。该是转义字符都 和。你需要对正则表达式进行两次转义: 但是你不必为此使用正则表达式,仅是因为你希望逐个字符地进行精确替换,并且这里不需要模式。因此就足够了: 更新:根据注释,你似乎想在JavaScript上下文中使用字符串。你最好使用它来覆盖更多字符。

  • 问题内容: 我需要在路径字符串中替换为,但是以下代码失败。 有什么有用的建议吗? 问题答案: 使用函数filepath.ToSlash将操作系统路径分隔符替换为路径中的“ /”。 在Windows上,函数返回。在其他操作系统上,该函数按原样返回path参数。

  • 问题内容: 我有以下问题: 我有一个向服务器执行AJAX请求的脚本,该服务器在预览中返回。但是,响应为。没什么大不了的,因为我只是想用单斜杠代替双斜杠。我一直在这里查看堆栈,但是我只能找到如何用双反斜杠替换单反斜杠,但反之亦然。 有人可以帮我这个忙吗? 问题答案: 应该这样做: 在正则表达式中,必须将单个转义为,在替换中也必须转义。