[英]Regex to match DOI in PDF with PyPDF2
我想寫提取的DOI從PDF文件,使用PyPDF2和下面的正則表達式,我發現了一個Python腳本這里 。
\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'])\S)+)\b
盡管當我在regex101上針對各種DOI對其進行測試時,此regex可以完美地工作,但是當我在以下腳本中使用它時,則會引發以下錯誤:
#!/usr/bin/env python
# -*- encoding:utf-8 -*-
from PyPDF2 import PdfFileReader
import re
import sys
pdf_file = sys.argv[1]
doi_re = re.compile("\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'])\S)+)\b")
input = PdfFileReader(file(pdf_file, "rb"))
text = input.getPage(0).extractText()
m = doi_re.search(text)
print(m.group(0))
File "/Users/fort/Documents/Dropbox/Code/Python/pdf2doi/pdf2doi.py", line 9
doi_re = re.compile("\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'])\S)+)\b")
^
SyntaxError: unexpected character after line continuation character
我的編輯器的語法突出顯示表明解析器不喜歡'])\\S)+)\\b")
,因此我嘗試轉義使用雙引號,從而避免了該特定問題,即,
\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?![\"&\'])\S)+)\b
但是,正則表達式不再匹配DOI。 (將正則表達式用單引號引起來也可以解決此語法錯誤,但結果相同。)
最后,如果我改用以下正則表達式,則腳本確實會匹配某些DOI,但會遺漏很多:
10.(\d)+/([^(\s\>\"\<)])+
任何有關如何使這項工作的想法將不勝感激。
您有一個較早的“”,應該逃脫。
["&\']
如果這不起作用,請修復僅指向常規頁面的regex101參考。
填充正則表達式和一些示例可以幫助我們進一步解決問題。
不能使用"
的"
,除非您使用引號的字符串\\"
以進行傳輸。
或者,您可以使用三個雙引號: """\\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\\'])\\S)+)\\b"""
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.