【问题标题】:Extract all DOI using regex - regex starting with a number and endning with a whitespace使用正则表达式提取所有 DOI - 正则表达式以数字开头并以空格结尾
【发布时间】:2019-04-10 15:37:27
【问题描述】:

我一直在尝试从一个大型 medline 数据文件中提取大约 9000 个 DOI。这些标识符的格式为“10.1*****/**************.”,总是以空格结尾,因此字符串的开头总是“10.1”并以空格结尾。我正在使用 sublime 文本编辑器。

我的最终目标是删除其他所有内容,因此我希望每个 DOI 代码都有一个带有换行符的文本文件。

从我的数据中提取

    AID - 10.1111/acps.12913 [doi]
SO  - Acta Psychiatr Scand. 2018 Dec;138(6):492-499. doi: 10.1111/acps.12913. Epub 2018
LID - 10.1177/0284185118764209 [doi]
AID - 10.1177/0284185118764209 [doi]
SO  - Acta Radiol. 2018 Dec;59(12):1438-1445. doi: 10.1177/0284185118764209. Epub 2018 
LID - 10.1007/s00018-018-2873-1 [doi]
AID - 10.1007/s00018-018-2873-1 [doi]
SO  - Cell Mol Life Sci. 2018 Dec;75(23):4301-4319. doi: 10.1007/s00018-018-2873-1.
LID - 10.1097/EJA.0000000000000889 [doi]
AID - 10.1097/EJA.0000000000000889 [doi]
SO  - Eur J Anaesthesiol. 2018 Dec;35(12):949-954. doi: 10.1097/EJA.0000000000000889.
LID - 10.1097/CMR.0000000000000479 [doi]
AID - 10.1097/CMR.0000000000000479 [doi]

因此,对于“99.doi: 10.1111/acps.12913.Epub 2018”,我想保留“10.1111/acps.12913”

先谢谢了!

【问题讨论】:

  • 您实际使用的是什么正则表达式工具
  • 崇高的文本编辑器,但我可以使用最合适的任何东西!

标签: regex


【解决方案1】:

我们可以尝试分两步进行。首先,删除不包含任何 DOI 的行:

Find: ^(?!.*10\.[A-Za-z0-9.\/-]+(?<!\.)(?=[ ]|\.)).*\n
Replace: (empty string)

然后对匹配的行进行替换,只留下 DOI:

Find:^.*(10\.[A-Za-z0-9.\/-]+)(?<!\.)(?=[ ]|\.).*$
Replace: $1

这是一个演示,显示用于进行肯定匹配的第二种模式工作正常。

Demo

【讨论】:

  • 感谢蒂姆,几乎成功了,第二步适用于所有在“/”之后包含数字的 DOI,但会删除包含字母的 DOS。10.010 10.007 10.007 10.006 10.006 10.2340/00015555-2987 10.2340/00015555-2987 1 10.006 10.1177/2048872618805663 10.1177/2048872618805663
  • @TorstenDahlén 我刚刚更新了答案,这很棘手,但现在似乎可以工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2011-09-10
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多