如何从含参考文献的HTML文本中提取DOI标识符?
从HTML参考文献中提取DOI的解决方案
问题背景
我有大量HTML格式的参考文献文本,需要提取其中两种形式的DOI:
- 带
doi:前缀的格式(如doi:10.1097/BRS.0b013e31829ff095) https://dx.doi.org/开头的链接格式(如https://dx.doi.org/10.1016/j.arth.2005.04.023)
之前尝试的正则表达式返回空列表,无法提取目标内容:
import re exp = "10.\\d{4,9}/[-._;()/:a-z0-9A-Z]+" pattern = re.compile(exp) pattern.findall(txt)
问题原因
之前的正则仅匹配DOI的核心标识部分(10.xxxx/...),但未包含实际文本中存在的前缀(doi:或https://dx.doi.org/),因此无法匹配到完整的DOI内容。
可行解决方案
使用同时兼容两种DOI格式的正则表达式,完整匹配带前缀的DOI内容:
import re # 匹配两种DOI格式:带doi:前缀的,以及dx.doi.org链接形式的 doi_pattern = re.compile(r'(doi:10\.\d{4,9}/[-._;()/:a-zA-Z0-9]+|https://dx\.doi\.org/10\.\d{4,9}/[-._;()/:a-zA-Z0-9]+)') # 从文本中提取所有匹配的DOI extracted_dois = doi_pattern.findall(txt) # 输出结果 print(extracted_dois)
输出结果
运行上述代码后,将得到符合需求的DOI列表:
['doi:10.1097/BRS.0b013e31829ff095', 'https://dx.doi.org/10.1016/j.arth.2005.04.023', 'https://dx.doi.org/10.1186/s13018-017-0552-9']
内容的提问来源于stack exchange,提问作者Vai
相关产品推荐
相关产品推荐

