re.search 不匹配字节串

re.search not matching the byte string

我有一个字符串对象来自预期的 session.before

据此,我正在尝试 re.search 使用以下正则表达式获取设备 ID。但它不匹配。

print (str(sess.before))
b'\r\n* daemon not running. starting it now on port 5037 *\r\n* daemon started successfully *\r\n353651\tdevice\r\n\r\n\r\n'

device_id = re.search ('([0-9a-zA-Z]+)[\t ]+device', str(sess.before))
print (device_id)
None

str() 调用将您的 bytes 对象转换为 表示。制表符将表示为字符序列 '\''t',而不是实际的制表符:

>>> str(b'\t')
"b'\t'"

不要将你的字节串敲成那样的字符串。从字节 解码 到字符串,或者只使用 bytes 正则表达式:

device_id = re.search(b'([0-9a-zA-Z]+)[\t ]+device', sess.before)

现在device_id是匹配对象;你可能想在上面调用 .group(1):

>>> import re
>>> before = b'\r\n* daemon not running. starting it now on port 5037 *\r\n* daemon started successfully *\r\n353651\tdevice\r\n\r\n\r\n'
>>> re.search(b'([0-9a-zA-Z]+)[\t ]+device', before)
<_sre.SRE_Match object; span=(89, 102), match=b'353651\tdevice'>
>>> re.search(b'([0-9a-zA-Z]+)[\t ]+device', before).group(1)
b'353651'