gpt4 book ai didi

Python正则表达式提取关键字前的最新数字

转载 作者:行者123 更新时间:2023-12-01 22:54:42 25 4
gpt4 key购买 nike

我有一个文本引用列表,如下所示,其中粗体文本是我想使用 re.findall() 提取的内容。

'10. T. BESLEY, POLITICAL SELECTION. J. ECON. PERSPECT. 19, 43–60 (2005). 11. J. D. FEARON, CAMBRIDGE STUDIES IN THE THEORY OF DEMOCRACY, IN DEMOCRACY, ACCOUNTABILITY, AND REPRESENTATION, A. PRZEWORSKI, B. MANIN, S. C. STOKES, EDS. (CAMBRIDGE UNIV. PRESS, 1999), PP. 55–97. 12. B. B. DE MESQUITA, A. SMITH, THE DICTATOR’S HANDBOOK: WHY BAD BEHAVIOR IS ALMOST ALWAYS GOOD POLITICS (HACHETTE UK, 2011). 13. S. WONG, S. E. GUGGENHEIM, “COMMUNITY-DRIVEN DEVELOPMENT: MYTHS AND REALITIES” (WPS8435, THE WORLD BANK, 2018), PP. 1–36. 14. A. BEATH, F. CHRISTIA, R. ENIKOLOPOV, DIRECT DEMOCRACY AND RESOURCE ALLOCATION: EXPERIMENTAL EVIDENCE FROM AFGHANISTAN. J. DEV. ECON. 124, 199–213 (2017). 15. B. A. OLKEN, DIRECT DEMOCRACY AND LOCAL PUBLIC GOODS: EVIDENCE FROM A FIELD EXPERIMENT IN INDONESIA. AM. POLIT. SCI. REV. 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”作为关键字,但其他所有内容都需要使用正则表达式进行匹配。

到目前为止我已经尝试过:

re.findall('\d+?.*?BLAKE.*?\d{4}', refer, re.DOTALL)

但这会捕获上面的所有内容,因为 \d+ 匹配“10.”,而不是“16.”。我以为 .*? 会最小化数字和 Blake 之间的字符串匹配,但事实并非如此。另一种选择是给出一个范围而不是 .*,例如 re.findall('\d+?{0,5}BLAKE.*?\d{4}',引用, re.DOTALL) 但我正在为许多其他文本这样做,我无法提前知道引用编号和第一作者的姓氏之间会有多少文本。

有没有办法在此处获取关键字 (BLAKE) 之前的最新数字(此处为 16)?还是一种最小化数字和关键字之间的搜索的方法?

最佳答案

如果您保证在引用号和您正在搜索的“关键字”之间没有任何其他数字,那么下面应该可以解决问题:

re.findall('\d+?[A-Z\.\s,]+BLAKE.*?\d{4}', text, re.DOTALL)

为了解释为什么这有效,表达式 [A-Z\.\s,]+ 是一个字符类,它将匹配任何大写字母,即文字 、空格和一个逗号。

更新:我刚刚重读了你的问题,你说你只想提取数字,而不是整个引用。为此,尼克的回答就足够了。不过,我会在这里保留我的答案,以防它有助于回答任何其他问题......

关于Python正则表达式提取关键字前的最新数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73550555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com