Python 字节数据的正则表达式
如何用正则表达式匹配一串字节?
比如说,怎么用正则表达式检查二进制数据是否只包含(0到10字节)字符?
data = 0x00 0x05 0x02 0x00 0x03
... (这不是字符串,而是二进制数据)
3 个回答
0
如果你想检查给定字符串中的所有字符是否都在范围0x00
到0x0B
之间(不包括这两个值),使用正则表达式就有点过于复杂了。你可以试试下面这种方法:
>>> 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')