我正在开发一个程序,该程序需要将某些字节与正则表达式匹配。
由于我正在使用字节,因此我的正则表达式和数据都是python类型bytes
。
我不确定下一部分是否相关,因此可以适当地跳到最后3行,并帮助我找出正则表达式为何不匹配16个字节的原因。谢谢!
我的正则表达式是:
regex = b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.{16}\x17\x00\x00\x00\x1f\x00\x00\x00WalkDown'
我知道达到相同结果可能会更短,但是此正则表达式由程序本身自动生成,因此我无法更改。
我正在尝试将此正则表达式与此数据进行匹配:
data = b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`,z\x11#\x00\x00\x00k\x004\x00\r\x00\n\x00\x17\x00\x00\x00\x1f\x00\x00\x00WalkDown'
这是我用来匹配它们的python代码:
import re
print(re.match(regex, data))
这会打印出None
,因此我认为正则表达式与数据不匹配。
由于我不是在测试字符串而是在测试字节,因此我无法使用任何在线正则表达式调试器,因为它们仅支持字符串正则表达式。
我试图像这样在我的数据中用“ 1”替换16个未知字节,并且它与正则表达式匹配:
data = b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001111111111111111\x17\x00\x00\x00\x1f\x00\x00\x00WalkDown'
我认为这表明错误在于。{16}部分。所以我用python检查了相应部分的长度:
len(b'`,z\x11#\x00\x00\x00k\x004\x00\r\x00\n\x00')
返回16
。应该是16。
那为什么这16个字节不匹配正则表达式b'.{16}'
谢谢!
答案 0 :(得分:1)
这是因为您要匹配的数据包含换行符。
尝试以下操作:re.match(regex, data, re.DOTALL)
。 DOTALL
标志将确保.
匹配任何字节,包括换行符。