Python 字节数据的正则表达式

3 投票
3 回答
7151 浏览
提问于 2025-04-16 21:30

如何用正则表达式匹配一串字节?
比如说,怎么用正则表达式检查二进制数据是否只包含(0到10字节)字符?

data = 0x00 0x05 0x02 0x00 0x03 ... (这不是字符串,而是二进制数据)

3 个回答

0

如果你想检查给定字符串中的所有字符是否都在范围0x000x0B之间(不包括这两个值),使用正则表达式就有点过于复杂了。你可以试试下面这种方法:

>>> check_range = lambda x: ord(x) in set(range(0x00, 0x0B))
>>> s = '\x1\x2\x3\xA'
>>> s2 = 'abcde'

>>> print all(check_range(c) for c in s)
True
>>> print all(check_range(c) for c in s2)
False
>>>
2

这段代码会匹配在空格之前的任何代码:

if re.search('[\0-\037]', line):
    # Contains binary data...

我不太明白你说的“0-10字节”是什么意思,但如果你是想匹配字节值在0到10之间的内容,那么就把上面代码中的\037替换成\012

需要注意的是,0到10并不是唯一能表示二进制数据的代码;任何小于\040或者大于\0177的值通常也会表示二进制数据。

5

如果你想检查一个字符串里只包含从 chr(0)chr(10) 之间的字符,可以直接使用下面的代码:

re.match('^[\0-\x0A]*$',data)

对于Python3,你也可以用字节字符串来做同样的事情:

re.match(b'^[\0-\x0A]*$',b'\x01\x02\x03\x04')

撰写回答