我正在做一个程序,需要匹配一些字节到正则表达式。
因为我使用的是字节,所以regex和data都是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
,因此我认为正则表达式与数据不匹配
因为我不是测试字符串而是测试字节,所以我不能使用任何在线regex调试器,因为它们只支持字符串regex
我试图用“1”替换数据中的16个未知字节,如下所示,它与regex匹配:
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个字节与regex b'.{16}'
不匹配呢
谢谢你
这是因为您要匹配的数据包含换行符
试试这个:
re.match(regex, data, re.DOTALL)
。DOTALL
标志将确保.
匹配任何字节,包括换行符相关问题 更多 >
编程相关推荐