2016-02-16 31 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之前的部分)。