最近,我得到了一个研究项目,该项目将学习如何将一些个人的传记数据解析为每个人的一组词典,从而大大受益。
该字符串包含断言词,我希望通过换行符创建关键词并通过换行符分隔词典。所以这里有两个人,我想在我的数据中创建两个不同的词典:
Bankers = ['Bakstansky,Peter;联邦高级副总裁 纽约储备银行负责公共信息 自1976年加入纽约联邦储备银行担任副总裁以来。前辈 负责区域和社区事务办公室的官员, 银行监察员和行政高级行政干事 集团,m零儿童教育城市纽约学院(学士学位) 工商管理,1961年);伊利诺伊大学,研究生 学校和纽约大学商学院。 1962-6: 商业和金融作家,纽约,美国银行家,新 约克 - 世界电报& Sun,Neia York Herald Tribune(银行编辑 1964-6)。 1966-74:大通曼哈顿银行:公共关系经理, 总部设在巴黎,1966-71;大通欧洲市场营销经理 规划,总部设在布鲁塞尔,1971-2;副总裁兼董事 Public Relations,1972-4.1974-76:Bache&有限公司副总裁兼 企业传讯总监。巴伦,Patrick K。;第一副 总统和<联邦储备银行的运营官o 亚特兰大自1996年2月以来。美联储成员“预备系统 银行第一副主席副主席会议 管理Con和折扣委员会,三个孩子Educ 迈阿密大学(管理学学士学位);哈佛 商学院(Prog Management Development); Stonier Graduate Sr. 银行,罗格斯大学。 1967年:加入亚特兰大联邦储备银行 在1971年的计算机操作中:转移到迈阿密分公司; 1974年: 协助:总统; 1987年:高级副总裁.1988:re1-亚特兰大 企业服务主管。格鲁吉亚成员执行委员会 Igmic教育委员会;大前任副主席 ji§?商业Charnber和大学校长 迈阿密;在亚特兰大,前任||联合之路副主席 亚特兰大领导亚特兰大队。理事会成员 经济教育。利益。 ']
例如,在这个数据中,我有两个人 - 彼得巴坦奇和帕特里克K.巴伦。我想为每个人创建一个包含以下4个密钥的字典:bankerjobs
,Number of children
,Education
和nonbankerjobs
。
在本文中已经有断言:“m”=孩子的数量“Educ”,“m”之前的任何东西都是银行家和任何在第一个“。”之后的东西。在Educ是非银行职业之后,在个人之间断开关键字似乎是在“。”之后的任何数量的空格。大于1
如何使用这些4个键在这些断言上使用正则表达式为这两个人创建一个字典?
具体来说,什么样的正则表达式可以帮助我用这4个密钥为这两个人创建一个字典(建立在上面指定的断点字上)?
我在想的模式在perl中会是这样的:
pattern = [r'(m/[ '(.*);(.*)m(.*)Educ(.*)/)']
但我不确定..
我认为代码与此类似但请纠正错误:
my_banker_parser = re.compile(r'somefancyregex')
def nested_dict_from_text(text):
m = re.search(my_banker_parser, text)
if not m:
raise ValueError
d = m.groupdict()
return { "centralbanker": d }
result = nested_dict_from_text(bankers)
print(result)
我希望能够采用这些代码并将其传递给所有感兴趣的人的传记。
答案 0 :(得分:0)
使用命名组可能不那么脆弱,因为它不依赖于每个传记中相同顺序的数据片段。这样的事情应该有效:
>>> import re
>>> regex = re.compile(r'(?P<foo>foo)|(?P<bar>bar)|(?P<baz>baz)')
>>> data = {}
>>> for match in regex.finditer('bar baz foo something'):
... data.update((k, v) for k, v in match.groupdict().items() if v is not None)
...
>>> data
{'baz': 'baz', 'foo': 'foo', 'bar': 'bar'}