a = bytes.fromhex("555e2233")
re.findall(bytes.fromhex("5e"), a)
以上代码,re没有识别出里面有5e。
5e 对应的 字符为 ^。
而后尝试re.findall(b"\^", a) 此时便能识别了。
可以确定就是转义的问题。那么遇到re规定的所有特殊字符,都会出现这个问题。有没有一个函数,让re直接匹配,不进行转义。
目前我的后退操作是,将二进制转化为字符串,也就没有这个问题了,但是还是想知道内部机理。
期待您的解惑。
python re模块 正则表达式 https://blog.csdn.net/weixin_43999327/article/details/118559583
该回答引用gpt
在正则表达式中,有一些字符是具有特殊含义的,例如 ^、$、.、*、+、?、{、}、[、]、\等字符,它们被称为元字符。如果我们需要匹配这些元字符本身,而不是它们的特殊含义,那么我们需要使用\进行转义,例如^表示匹配^本身。
对于匹配二进制数据,需要使用bytes类型数据进行操作。当我们使用re.findall(bytes.fromhex("5e"), a)进行匹配时,re会将"5e"解析为字符串,进而转换成bytes,最终得到b"5e",这并不是我们想要的结果。因此,我们需要在正则表达式中使用b"\x5e"来匹配^字符本身。
总结来说,如果希望在bytes类型数据中使用正则表达式匹配特殊字符本身,可以使用bytes类型的转义字符。例如,b"\x5e"来匹配^字符,b"\x2e"来匹配.字符。