基于正则表达式拆分文件内容:python

时间:2016-02-16 10:30:37

标签: python regex list split

我想将每个规则(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。

1 个答案:

答案 0 :(得分:0)

results=re.split(r'\s*[\n]*rule.*[\n]*\s*.*{.', buf)
  1. 您的模式不匹配,因为您的输入中的内容发起{后面紧跟\n,而.没有re.DOTALL不符合{{ 1}}。
  2. \n中,\s*[\n]*无用,因为[\n]*已匹配\s
  3. 由于您还希望返回规则名称,因此无需将其包含在拆分模式中。
  4. 所以,

    \n

    应该这样做(results = re.split(r'\brule\s+', buf)[1:] 会丢弃第一个[1:]之前的部分。)