使用正则表达式从字符串中提取多个单词

时间:2018-10-13 14:47:07

标签: python regex string python-2.7

我正在尝试从论文的一部分中提取所有参考文献作为列表。现在,我只有一个段落并将其设置为字符串。

我想知道是否可以在python上使用正则表达式来做到这一点?我希望能够从字符串中提取多个单词,但是到目前为止,我所能做的只是提取年份,单个单词或字符,而不是一次提取整个引用。 另外,确实存在很多条件,因为引用的格式可能不同,例如:

text="As shown by Macelroy et al. (1967), bla bla. Podar & Reysenbach (2006) also researched ... Another example is ... (Valdes et al. 2008). Most notably .... Edwards, Bartlett & Stirling (2003)."

因此,有些数字放在方括号内,有些完全用方括号括起来,有些则有多个大写单词,有些则带有“ et al”,依此类推。是否可以在一次搜索中定义所有这些要求,然后将它们全部打印出来?

我知道有一些网站或程序可以放入本文中,以为我提取所有参考文献,但是我想知道自己如何做。

谢谢

NB:经过编辑以阐明引用将如何嵌入到字符串中

1 个答案:

答案 0 :(得分:1)

import re
t = """
As shown by Macelroy et al. (1967), bla bla. Podar
 & Reysenbach (2006) also researched ... Another example is ... (Valdes et al. 2008). Most notably .... Edwards, Bartlett & Stirling (2003).
"""
f = ["".join(result).replace("(","") for result in re.findall("([A-Z])([^A-Z)]+|[^.,]+)([0-9]{4})",t,re.S)]
print(f)
  1. ([A-Z])匹配一个印刷体字母
  2. [^ A-Z)] + | [^。,] +匹配两种情况,

    • 匹配不带印刷体字母和)的字符串
    • 匹配不包含,.的字符串,因为如果包含,.可能匹配整个句子
  3. [0-9] {4}以4个数字结尾