我有一个二进制文件。我需要使用 python 正则表达式从该文件中提取少量数据。
我需要提取存在于空字符集之间的非空字符集。
例如这是主要字符集:
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\xfe\x00\x00\x23\x41\x00\x00\x00\x00\x00\x00\x00\x00\x41\x49\x57\x00\x00\x00\x00\x32\x41\x49\x57\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x65\x00\x35\x56
正则表达式应该从上面的主集中提取下面的字符集:
\xff\xfe\xfe\x00\x00\x23\x41, \x41\x49\x57\x00\x00\x00\x00\x32\x41\x49\x57\x00\x00\x00\x00\x32 and \x56\x65\x00\x35\x56
有一件事很重要,如果它连续获得超过 5 个空字节,那么它应该只将这些空字符设置为分隔符。否则它应该将这些空字节包含到非空字符中。正如您在给定示例中所见,提取的字符集中也存在一些空字符。
如果它没有任何意义,请告诉我,我会尝试以更好的方式解释它。
提前致谢
请您参考如下方法:
你可以在 \x00{5,}
上拆分 这是 5 个或更多个零。它是您指定的分隔符。
在 Perl 中,它是这样的
Perl 测试用例
$strLangs = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\xfe\x00\x00\x23\x41\x00\x00\x00\x00\x00\x00\x00\x00\x41\x49\x57\x00\x00\x00\x00\x32\x41\x49\x57\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x65\x00\x35\x56";
# Remove leading zero's (5 or more)
$strLangs =~ s/^\x00{5,}//;
# Split on 5 or more 0's
@Alllangs = split /\x00{5,}/, $strLangs;
# Print each language characters
foreach $lang (@Alllangs)
{
print "<";
for ( split //, $lang ) {
printf( "%x,", ord($_));
}
print ">\n";
}
输出>>
<ff,fe,fe,0,0,23,41,>
<41,49,57,0,0,0,0,32,41,49,57,0,0,0,0,32,>
<56,65,0,35,56,>
