簡體   English   中英

正則表達式可與PyPDF2匹配PDF中的DOI

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM