正则表达式与python不匹配

时间:2018-08-15 23:48:23

标签: python regex python-3.x byte

我正在开发一个程序,该程序需要将某些字节与正则表达式匹配。 由于我正在使用字节,因此我的正则表达式和数据都是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}'

谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为您要匹配的数据包含换行符。

尝试以下操作:re.match(regex, data, re.DOTALL)DOTALL标志将确保.匹配任何字节,包括换行符。