我有一个文本引用列表,如下所示,其中粗体文本是我希望使用re.findall()
提取的文本.
10.T·贝斯利,政治选拔.J·伊肯.透视.19、43-60(2005).11.J.D.Fearon,剑桥大学在民主理论、民主、责任和代表性方面的研究,A.Przeworski,B.Manin,S.C.Stokes,EDS.(剑桥大学Press,1999),PP.55-97.12.B.B.de Mesquita,A.Smith,《独裁者手册:为什么不良行为几乎总是好的政治》(Hachette UK,2011).13.S.Wong,S.E.Guggenheim,"社区驱动的发展:神话与现实"(WPS8435,世界银行,2018年),页.1-36.14.A.Beath、F.Christia、R.Enikolopov,《直接民主和资源分配:来自阿富汗的实验证据》.J.Dev.经济学人.124、199-213(2017).15.B.A.奥尔肯,《直接民主和地方公共产品:来自印度尼西亚实地试验的证据》.上午好.波利特.SCI.牧师.104、243-267(2010).16. A. BLAKE, M. J. GILLIGAN, INTERNATIONAL INTERVENTIONS TO BUILD SOCIAL CAPITAL: EVIDENCE FROM A FIELD EXPERIMENT IN SUDAN. AM. POLIT. SCI. REV. 109, 427–449 (2015)‘
基本上,我想获取引文编号(这里,16),后面跟着感兴趣的引文,直到引文发表的年份(这里,2015).因为我在列表中有第一个作者的姓氏,所以我可以使用‘Blake’作为关键字,但其他所有内容都需要使用regex进行匹配.
到目前为止,我已经try 过了:
re.findall('\d+?.*?BLAKE.*?\d{4}', refer, re.DOTALL)
但这抓住了上面的一切,因为\d+
个匹配的是‘10’,而不是‘16.’.我以为.*?
会最小化数字和Blake
之间的字符串匹配,但事实并非如此.另一种 Select 是给出一个范围,而不是.*
,比如re.findall('\d+?{0,5}BLAKE.*?\d{4}', refer, re.DOTALL)
,但我对许多其他文本这样做,我不能提前知道参考数字和第一作者的姓氏之间会有多少文本.
有没有办法获取关键字(布莱克)之前的最新数字(这里是16)?或者一种最小化数字和关键字之间搜索的方法?