2013-10-10 52 views
2

我寫了一個簡單的python腳本來解析文本文件。但我的正則表達式需要修改才能在第二組中找到多行。源文本文件的查找文章正則表達式Python

import re 


if __name__ == '__main__': 
    sonnik = open('sonnik.txt').read().decode('utf-8') 
    article = re.compile(ur'^([A-Za-zА-Яа-я0-9_\-:,\.«» ]+)[\n]{2}^[ ]{5}([A-Za-zА-Яа-я0-9_\-:,\.«» ]+)$',re.M|re.U) 
    result = article.findall(sonnik) 
    print len(result) 

    print '-----' 
    print result[0][1].decode('utf-8') 
    print '-----' 

實施例:

Банкет 

    Видеть во сне банкет - хорошо. Друзья будут к Вам благосклонны. Видеть во сне себя в толпе веселых, нарядно одетых гостей, которые едят на дорогой посуде и пьют старые вина баснословной стоимости, предвещает огромную удачу в любых начинаниях и счастье в кругу друзей. 
    Видеть недружелюбие среди гостей, нелепые пустые столы - является знаком очень тяжелых недоразумений, размолвок и разочарований, ожидающих Вас. 

Банкрот 

    Если Вам снится сон, в котором Вы не можете расплатиться с долгами и чувствуете себя банкротом - то в реальной жизни не бойтесь угрозы с этой стороны. Напротив, Ваша энергия и уверенность в себе позволяет Вам наилучшим образом организовать свои дела. 
    Однако иные тревоги могут смутить Вашу душу. 
    Если Вы видите банкротами других, то это означает, что наяву Вам встретятся люди благородные, честные в делах, хотя, возможно, излишней откровенностью они могут Вам навредить. 
    Молодой особе этот сон обещает небольшую размолвку с любимым, виной чему разность их взглядов. 

期限和文章對。文章文本放置在新的行之後,5個空格縮進。當前的正則表達式僅匹配文本的第一行。是否有可能改變正則表達式使用類似循環的組?

回答

1

也許你可以添加:

(?:\n^[ ]{5}[A-Za-zА-Яа-я0-9_\-:,\.«» ]+)* 

第二擷取組後,如:

^([A-Za-zА-Яа-я0-9_\-:,\.«» ]+)\n{2}^[ ]{5}([A-Za-zА-Яа-я0-9_\-:,\.«» ]+(?:\n^[ ]{5}[A-Za-zА-Яа-я0-9_\-:,\.«» ]+)*)$ 

regex101 demo

+0

謝謝你,它的作品。據我所知,這個未被捕獲的小組匹配只是文章的最後一行,這擴大了小組的溝通。 – Dmitry

+1

@Dimm它匹配第一篇文章行後面的每一行。它的工作方式是試圖找到5個空格縮進,如果沒有匹配,它就停在那裏。這就是它如何匹配文章的最後一行:) – Jerry