填充之间的匹配数据

时间:2019-07-10 05:13:22

标签: python regex

我正在尝试匹配二进制文件中的某些字符串,并且字符串似乎已被填充。例如,单词PROGRAM可以是这样的二进制文件:

%$##@P^&#!)00000R{]]]////O.......G"""""R;;$#!*%&#*A/////847M

在该示例中,单词PROGRAM在那里,但是它被拆分并且位于随机数据之间,因此我试图使用正则表达式来查找它。

目前,这是我想出的,但我认为这不是很有效:

(?<=P)(.*?)(?=R)(.*?)(?=O)(.*?)(?=G)(.*?)(?=R)(.*?)(?=A)(.*?)(?=M)

3 个答案:

答案 0 :(得分:2)

如果要从字符串中获取PROGRAM,一种选择可能是将re.sub与否定的字符类一起使用,以删除所有不需要的内容。

[^A-Z]+

Regex demo | Python demo

例如:

import re
test_str = "%$##@P^&#!)00000R{]]]////O.......G\"\"\"\"\"R;;$#!*%&#*A/////847M"
pattern = r'[^A-Z]+'
print(re.sub(pattern, '', test_str))

结果

  

程序

答案 1 :(得分:1)

这应该对您有用,并且比您当前的解决方案更有效:

P[^R]+R[^O]+O[^G]+G[^R]+R[^A]+A[^M]+M

说明:

P[^R]+-匹配P,且匹配R以外的一个或多个字符

Demo

答案 2 :(得分:0)

我不太确定所需的输出是什么,我猜可能是这个表达式,

(?=.*?P.*?R.*?O.*?G.*?R.*?A.*?M).*?(P).*?(R).*?(O).*?(G).*?(R).*?(A).*?(M)

可能是一个开始。

this demo的右上角对表达式进行了说明,如果您想进一步探索或简化/修改它,可以在this link中观察它如何与某些示例输入匹配如果愿意,可以逐步进行。