使用正则表达式提取所有DOI,正则表达式以数字开头,以空白结尾



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

我的最终目标是删除所有其他内容,因此我希望每个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">

谢谢!

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

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

然后在匹配行上进行替换,只留下DOI:

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

这是一个演示,显示了第二种模式的积极匹配是正确的工作。

演示

最新更新