字节变量上的 Python3 正则表达式

was*_*256 9 python regex python-3.x

我正在尝试对字节变量执行正则表达式替换,但收到错误

  sequence item 0: expected a bytes-like object, str found
Run Code Online (Sandbox Code Playgroud)

这是一个用python3重现问题的小代码示例:

import re

try:
    test = b'\x1babc\x07123'
    test = re.sub(b"\x1b.*\x07", '', test)
    print(test)
except Exception as e:
    print(e)
Run Code Online (Sandbox Code Playgroud)

Jim*_*ard 13

当作用于 bytes 对象时,所有参数都必须是 type byte,包括替换字符串。那是:

test = re.sub(b"\x1b.*\x07", b'', test)
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 7

您的替换值bytes也必须是一个对象:

re.sub(b"\x1b.*\x07", b'', test)
#                     ^^^
Run Code Online (Sandbox Code Playgroud)

您无法用str对象替换匹配的字节,即使这是一个空字符串对象。

演示:

>>> import re
>>> test = b'\x1babc\x07123'
>>> re.sub(b"\x1b.*\x07", b'', test)
b'123'
Run Code Online (Sandbox Code Playgroud)