我想将每个规则(rule1,rule2,rule3)保留在列表中。示例文件:https://github.com/Yara-Rules/rules/blob/master/malware/APT_WildNeutron.yar 我使用以下代码
patt=re.compile("\s*[\n]*rule.*[\n]*\s*.*{")
results=re.split(r'\s*[\n]*rule.*[\n]*\s*.*{.', buf)
结果不包含list.but看起来像split不起作用。 有人可以提供帮助吗?
-----------文件内容-------
rule rule1{
meta:
desc-test1
}
rule rule2{
meta:
desc-test2
}
rule rule3{
meta:
desc-test3
}
----文件结束---------- 预期产出
在规则内部可以有"规则字符串"。所以应该将一条规则确定为 规则ruleName {**内容可以包含任何字符串的新行字} **。规则内容将受到花括号的限制。我应该能够将规则提取到列表中。规则[0]应包含规则1及其内容。同样适用于rule2。
答案 0 :(得分:0)
results=re.split(r'\s*[\n]*rule.*[\n]*\s*.*{.', buf)
{
后面紧跟\n
,而.
没有re.DOTALL
不符合{{ 1}}。\n
中,\s*[\n]*
无用,因为[\n]*
已匹配\s
。所以,
\n
应该这样做(results = re.split(r'\brule\s+', buf)[1:]
会丢弃第一个[1:]
之前的部分。)