【问题标题】:extracting multiple words from a string using regex使用正则表达式从字符串中提取多个单词
【发布时间】:2019-03-18 13:08:01
【问题描述】:

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

我想知道是否可以在 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”等等。是否可以在一次搜索中定义所有这些要求,然后将它们一起打印出来?

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

谢谢

注意:已编辑以阐明引用将如何嵌入到字符串中

【问题讨论】:

  • 告诉我们您的预期输出
  • 我已经编辑了字符串以更好地显示预期的输入。我的预期输出只是一个参考列表(最好没有括号),所以“Macelroy et al. 1967, Podar & Reysenbach 2006, Valdes et al. 2008, Edwards, Bartlett & Stirling 2003”
  • 试试这个f = ["".join(result).replace("(","") for result in re.findall("([A-Z])([^A-Z)]+|[^.,]+)([0-9]{4})",t)],我不知道这是否适用于你的整篇文章
  • 太棒了,它成功了,谢谢 kcorlidy

标签: python regex string python-2.7


【解决方案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 个数字结尾

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2017-12-17
    • 2016-02-24
    • 2023-02-09
    • 1970-01-01
    相关资源
    最近更新 更多