Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 填充之间的数据匹配_Python_Regex - Fatal编程技术网

Python 填充之间的数据匹配

Python 填充之间的数据匹配,python,regex,Python,Regex,我试图匹配二进制文件中的一些字符串,这些字符串似乎被填充了。例如,单词PROGRAM可以是二进制的,如下所示: %$##@P^&#!)00000R{]]]////O.......G"""""R;;$#!*%&#*A/////847M 在那个例子中,单词PROGRAM在那里,但是它是分开的,在随机数据之间,所以我尝试使用regex来查找它 目前,这是我想到的,但我认为这不是很有效: (?<=P)(.*?)(?=R)(.*?)(?=O)(.*?)(?=G)(.*?)(?=R)

我试图匹配二进制文件中的一些字符串,这些字符串似乎被填充了。例如,单词PROGRAM可以是二进制的,如下所示:

%$##@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))
结果

节目


如果in
s
是您的二进制字符串:
s.translate(dict((ord(ch),“”)表示ch-in-set('PROGRAM')。对称的(u-difference))
这将过滤掉每个填充字符,只留下“PROGRAM”(如果有)我建议您只需编写一个循环来检查序列中的每个字符,并根据您的发现标记出每个期望的字母,就可以获得更高的效率。Regex功能强大且优雅,但对于简单的解析提取来说,它可能会有过大的杀伤力。