假设您有一个如下所示的字符串:
text = "I love 🧸 so much!"
text = text.encode()
text = b"I love \xf0\x9f\xa7\xb8 so much!"
我想保留已编码的bear,但在末尾删除!
。我将使用正则表达式匹配所有内容,但标点符号是text = re.sub(b"[^\w\s\\]", b"", text)
但这会抛出error: unterminated character set at position 0
,因为我认为最后一个]
会逃逸。以text = re.sub(b"[^\w\s\\\]", b"", text)
的形式尝试正则表达式可以解决此错误,但随后正则表达式将删除编码的bear和!
text = b"I love so much"
我需要某种方法使\
成为正则表达式的一部分,以保留熊。到目前为止,我已经尝试:
[^\w\s\\[\w\d]{3}]
[^\w\s\\[A-Za-z0-9]{3}]
[^\\\w\s]
我的头撞在墙上试图解决这个问题
此方法不使用正则表达式。如果使用正则表达式是必需的,则必须忽略这一点
bytes.translate返回bytes或bytearray对象的副本,其中删除可选参数delete中出现的所有字节。 因此
clean_text
变成了b"I love \xf0\x9f\xa7\xb8 so much"
您必须对正则表达式使用r-string,而不是b-string,因此使用
b'...'
代替r'...'
。此外,您不能将正则表达式应用于字节字符串,因此必须首先将其转换为字符串。以下是未更改正则表达式的完整工作代码:Try it online!
输出:
您可能希望使用
text.encode('unicode_escape')
(它给出了b'I love \\U0001f9f8 so much!'
)而不是仅仅使用text.encode()
(它给出了b'I love \xf0\x9f\xa7\xb8 so much!'
),因为将字符串表示为unicode转义而不是十六进制转义更为正确和可重用相关问题 更多 >
编程相关推荐