我正在对法国的法官任命系统进行一些数据分析,并使用一些代码来执行此操作。但我遇到了正则表达式问题。
我的数据由一大堆法院和法官任命组成。
这是一个示例列表:
Appellate Court of Paris
Blabla about the jugdge : Mr Dominique Martin, blahblahblah Blabla about the judge : Ms Jeanne Truc
District Court of Paris
Blabla about the jugdge : Mr François Dupont, blahblahblah Blabla about the jugdge : Mr Jean Dupuis, blahblahblah Blabla about the jugdge : Ms Marguerite Lorem, blahblahblah
District Court of Lyon
Blabla about the judge : Ms Lorena Ipsum, blablabh
其中有很多地方法院和上诉法院混合在一起。通常,在城市上诉法院之后是地区法院。
(对于阅读这篇文章的法国人,我将“Tribunal de grande instance”翻译成“District Court”,将“Cour d'appel”翻译成“Appellate Court”,如果所有内容都是英文的话会更容易理解)
然后我需要一份法院法官的名单。
为了实现这一点,我开始使用优秀的 ol' python 3 做一个正则表达式。首先,我得到了所有评委的名单,这要感谢先生和夫人(嗯,这是法语,所以 M. 和 Mme.)。然后,遍历此列表中的每个法官以查找他们被任命的到底在哪里。我写了类似的东西:
court = re.findall(r'(District Court of.+?|Appelate Court of.+?)\n.+?'+ judge, appointments, re.S)
“法官”变量是我正在寻找的当前法官的名字,“任命”是我正在对其进行正则表达式处理的列表。 Dotall 标志打开,如果你不了解 python,请忘记模式前的 'r',它只是关于如何解释后面字符串中的特殊字符。
(我也尝试过使用 re.search,但我认为 re.findall 更适合发现错误)
而且结果始终是列表中的第一个(例如:巴黎上诉法院)...就好像它是一个贪婪的请求,即使我用'?'标记了每个限定符。在 Python 中将量词标识为非贪婪的。
(我是法学院的学生,不是 CS 的学生,如果我在那里做错了什么,我请求原谅)。
注意:我正在解析的原始列表:http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000022472292 (注意那是一个丑陋的法国政府网站)。
最佳答案
使用 lxml解析 html:
import lxml.html as LH
import re
url='http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000022472292'
doc=LH.parse(url)
data=(p.text_content() for p in doc.xpath('//p'))
next(data) # Skip the paragraph before the first court
result={}
for court,text in zip(*[data]*2):
court=court.strip()
names=re.findall(r'((?:M\.|Mme)[^,]+),',text)
result[court]=names
print(result)
产量 this result .
您链接到的页面实际上组织得很好。 (至少,我见过更糟糕的情况!;)。每个法庭都有自己的<p>
标记,以及以下 <p>
标签包含列出所有人的文本。因此,如果您使用 HTML 解析器查找所有 <p>
标签,您可以快速梳理法院和人民。
grouper recipe zip(*[iter(...)]*2)
用于单步执行 <p>
-标签数据二<p>
-一次标记。
关于python - 使用正则表达式和 Python 识别包含唯一单词的特定段落的标题(和 French Judges),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216729/