我写了一个简单的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个空格缩进。当前正则表达式仅匹配文本的第一行。是否可以更改正则表达式以使用类似循环的组?
答案 0 :(得分: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_\-:,\.«» ]+)*)$