Python 填充之间的数据匹配
我试图匹配二进制文件中的一些字符串,这些字符串似乎被填充了。例如,单词PROGRAM可以是二进制的,如下所示:Python 填充之间的数据匹配,python,regex,Python,Regex,我试图匹配二进制文件中的一些字符串,这些字符串似乎被填充了。例如,单词PROGRAM可以是二进制的,如下所示: %$##@P^&#!)00000R{]]]////O.......G"""""R;;$#!*%&#*A/////847M 在那个例子中,单词PROGRAM在那里,但是它是分开的,在随机数据之间,所以我尝试使用regex来查找它 目前,这是我想到的,但我认为这不是很有效: (?<=P)(.*?)(?=R)(.*?)(?=O)(.*?)(?=G)(.*?)(?=R)
%$##@P^&#!)00000R{]]]////O.......G"""""R;;$#!*%&#*A/////847M
在那个例子中,单词PROGRAM
在那里,但是它是分开的,在随机数据之间,所以我尝试使用regex来查找它
目前,这是我想到的,但我认为这不是很有效:
(?<=P)(.*?)(?=R)(.*?)(?=O)(.*?)(?=G)(.*?)(?=R)(.*?)(?=A)(.*?)(?=M)
(?这应该适合您,并且比您当前的解决方案更有效:
P[^R]+R[^O]+O[^G]+G[^R]+R[^A]+A[^M]+M
说明:
p[^R]+
-匹配p
,匹配除R
我不太确定所需的输出可能是什么,我猜可能是这个表达式
(?=.*?P.*?R.*?O.*?G.*?R.*?A.*?M).*?(P).*?(R).*?(O).*?(G).*?(R).*?(A).*?(M)
也许是个开始
该表达式在的右上角面板上进行了解释,如果您希望进一步探索或简化/修改它,在中,您可以观察它将如何与一些示例输入逐步匹配(如果您愿意)。如果您希望从字符串中获取程序,一个选项可能是与否定字符类一起使用,以删除所有不需要的内容新界
[^A-Z]+
|
例如:
import re
test_str = "%$##@P^&#!)00000R{]]]////O.......G\"\"\"\"\"R;;$#!*%&#*A/////847M"
pattern = r'[^A-Z]+'
print(re.sub(pattern, '', test_str))
结果
节目
如果ins
是您的二进制字符串:s.translate(dict((ord(ch),“”)表示ch-in-set('PROGRAM')。对称的(u-difference))
这将过滤掉每个填充字符,只留下“PROGRAM”(如果有)我建议您只需编写一个循环来检查序列中的每个字符,并根据您的发现标记出每个期望的字母,就可以获得更高的效率。Regex功能强大且优雅,但对于简单的解析提取来说,它可能会有过大的杀伤力。