Предполагая, что шаблон для DOI - это подстрока, начинающаяся с 10.
и более цифр, /
и затем 1+ слова или .
символов, вы можете сначала преобразовать строки, используя urlib.parse.unquote
(для преобразования сущностей в литералыстрок), а затем используйте re.search
с шаблоном \b10\.\d+/[\w.]+\b
для извлечения каждого DOI из элементов списка:
import re, urllib.parse
doi_list=["10.1038/ncomms3230", "10.1111/hojo.12033", "blog/uninews", "article/info%3Adoi%2F10.1371%2Fjournal.pone.0076852? ", "utm_source=feedburner&utm;_medium=feed&utm;_campaign=Feed%3A+plosone%2",
"10.1002/dta.1578", "enhanced/doi", "doi/pgen.1005204", "doi:10.2135/cropsci2014.11.0791", "10.1126/science.aab1052", "gp/about-springer", "10.1038/srep14556","10.1002/rcm.7274", "10.1177/0959353515592899"]
new_doi_list = []
for doi in doi_list:
doi = urllib.parse.unquote(doi)
m = re.search(r'\b10\.\d+/[\w.]+\b', doi)
if m:
new_doi_list.append(m.group())
print(m.group()) # DEMO
Вывод:
10.1038/ncomms3230
10.1111/hojo.12033
10.1371/journal.pone.0076852
10.1002/dta.1578
10.2135/cropsci2014.11.0791
10.1126/science.aab1052
10.1038/srep14556
10.1002/rcm.7274
10.1177/0959353515592899
Включитьпустые элементы при отсутствии совпадения добавьте условие else: new_doi_list.append("")
к приведенному выше коду.