我现在要花很多时间来创建一个脚本来解析我的文本。
我有一个看起来像下面的文本。我想做的是浏览一章,查看其中的所有文章,然后输出字典,该字典以该章的名称作为键,并且作为每篇文章的值,有一个列表,其中包含该文章中引用的所有文章一个。
下面是文本的示例
第一章
艺术。 1 -(1)所有进入公共道路的车辆均根据条所述的《紧急条例》的规定。 2,参数(2)和>不包括在第7条第7款中列出的车辆。 (6)。
艺术。 2 -(1) TEXT TEXT TEXT art。 3 TEXT TEXT
(2)文本文本文本
艺术。 3 -(1)引用 art的文字。 1 个文本
艺术。 4 -文字未提及其他文章
第二章
示例输出:
第1章 = {第1条:[“第2条;第2款”,“第7条;第(6)款”]; 第二条:[“第三条”]; 艺术。 3 :[“第1条”]; 第4条:“无参考”}
此脚本应存储本章,以便我可以对其进行解析并根据解析结果输出一些内容。
codul_rutier.txt是我必须通过的文件
cod_rutier= open('codul_rutier.txt','r')
text = cod_rutier.read()
for chapter in text:
chapter.split('CHAPTER')
for line in capitol:
if re.match(r'^Art.', line):
print line
break
我什至不知道该如何开始,我尝试了多种方法来打开文件以逐章读取,拆分,if循环中的for循环。
如果有人可以帮助我,我将不胜感激!
答案 0 :(得分:0)
您可以从以下代码开始。它包含3个正则表达式chapter_re
,art_re
和link_re
。 borders
和new_borders
用于保持比赛的位置,以便以后在比赛之间进行搜索。 chapter_zero
是CHAPTER I
之前的文本的名称。我对正则表达式没有经验,所以我认为代码可能会得到显着改善。我从Mark Summerfield的Programming in Python 3: A Complete Introduction
了解了正则表达式,并在https://regex101.com/网站上尝试了在线表达式。
import re
chapter_re = re.compile('(?P<chapter>CHAPTER [IVX]+)')
art_re = re.compile('(?P<art>^Art. [0123456789]+) - ', re.MULTILINE)
link_re = re.compile('(?P<link>[Aa]rt[.][ ]*[0123456789]+[,]*[ ]*[Pp]ar[.][ ]*[(]*[0123456789]+[)]*|[Aa]rt[.][ ]*[0123456789]+)', re.MULTILINE)
with open('1.txt', mode='r', encoding='UTF-8') as file:
data = file.read()
chapters = ['chapter_zero']
borders = [[0, None]]
result = {'chapter_zero': dict()}
# search for CHAPTERs
for match in chapter_re.finditer(data):
result[match.group('chapter')] = dict()
chapters.append(match.group('chapter'))
borders[-1][1] = match.span()[0]
borders.append([match.span()[1], None])
borders[-1][1] = len(data)
for chp, brd in zip(chapters, borders):
arts = ['art_zero']
new_borders = [[0, None]]
# search for Arts
for match in art_re.finditer(data[brd[0]:brd[1]]):
result[chp][match.group('art')] = list()
arts.append(match.group('art'))
new_borders[-1][1] = match.span()[0]
new_borders.append([match.span()[1], None])
new_borders[-1][1] = brd[1] - brd[0]
# search for links
for art, nbrd in zip(arts, new_borders):
for nmatch in link_re.finditer(data[brd[0]:brd[1]][nbrd[0]:nbrd[1]]):
result[chp][art].append(nmatch.group('link'))
# printing results
for k, v in result.items():
print(k)
for k, v in v.items():
print('\t{}: {}'.format(k, v))
print()
输出:
chapter_zero
CHAPTER I
Art. 1: ['art. 2, par. (2)', 'art.7, par. (6)']
Art. 2: ['art. 3']
Art. 3: ['art. 1']
Art. 4: []
CHAPTER II