如何为一行字节进行正则表达式匹配?
例如,如何检查二进制数据由(0-10字节)字符组成的正则表达式?
data = 0x00 0x05 0x02 0x00 0x03
...(不是字符串,二进制数据)
答案 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)
如果要检查给定字符串中的所有字符是否在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
>>>