2016-02-16 27 views
0

我想保持每个规则(rule1,rule2,rule3)在列表中。示例文件:https://github.com/Yara-Rules/rules/blob/master/malware/APT_WildNeutron.yar 我使用下面的代码基于正则表达式拆分文件内容:python

patt=re.compile("\s*[\n]*rule.*[\n]*\s*.*{") 

results=re.split(r'\s*[\n]*rule.*[\n]*\s*.*{.', buf) 

结果不包含它看起来像分裂不正常的list.but。 任何人都可以帮忙吗?

-----------文件内容-------

rule rule1{ 

meta: 

desc-test1 


} 

rule rule2{ 

meta: 

desc-test2 


} 

rule rule3{ 

meta: 

desc-test3 


} 

----文件端---------- 预期产量

规则里面可以有“规则字符串”。所以一个规则应该被标识为 规则ruleName {**内容可以是任何包含新行字的任何字符串} **。规则内容将受花括号限制。我应该能够将规则提取到列表中。规则[0]应该包含规则1及其内容。类似于rule2。

+0

这个问题目前还不清楚,请添加您希望*的输出。 – donkopotamus

回答

0
results=re.split(r'\s*[\n]*rule.*[\n]*\s*.*{.', buf) 
  1. 你会不匹配,因为在你的输入{发起内容是紧跟\n.没有re.DOTALL不匹配\n
  2. \s*[\n]*[\n]*是无用的,因为\s已经匹配\n
  3. 由于您希望规则名称也被返回,因此您无需将其包含在分割模式中。

所以,

results = re.split(r'\brule\s+', buf)[1:] 

应该做(的[1:]丢弃第一rule之前的部分)。