用于字节数数据的Python正则表达式

时间:2011-07-14 10:27:07

标签: python regex

如何为一行字节进行正则表达式匹配?
例如,如何检查二进制数据由(0-10字节)字符组成的正则表达式?

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

3 个答案:

答案 0 :(得分:5)

如果您想检查字符串是否只包含chr(0)chr(10)之间的字符,只需使用

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

对于Python3,您可以对字节字符串执行相同的操作:

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

答案 1 :(得分:2)

这将匹配 space 之前的任何代码:

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

我不确定你的意思是“0-10字节”,但是如果你的意思是你只想匹配0到10的字节值,那么用\037代替\012上面的代码。

请注意,0-10并不是建议二进制数据的唯一代码;低于\040或高于\0177的任何内容通常会建议二进制数据。

答案 2 :(得分: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
>>>