簡體   English   中英

在 Python 中提取其他兩個之間的字符串

[英]Extract a string between other two in Python

我正在嘗試從 fdf(PDF 注釋文件)中提取注釋。 實際上,這是在其他兩個之間提取一個字符串。 我做了以下事情:

  1. 我使用以下命令打開 fdf 文件:
import re
import os

os.chdir("currentworkingdirectory")
archcom =open("comentarios.fdf", "r")
cadena = archcom.read()
  1. 使用打開的文件,我創建了一個名為 cadena 的字符串,其中包含我需要的所有信息。 例如:
cadena = "\n215 0 obj\n<</D[2.0 2.0]/S/D>>\nendobj\n216 0 obj\n<</D[2.0 2.0]/S/D>>\nendobj\n217 0 obj\n<</D[2.0 2.0]/S/D>>\nendobj\n218 0 obj\n<</W 3.0>>\nendobj\n219 0 obj\n<</W 3.0>>\nendobj\ntrailer\n<</Root 1 0 R>>\n%%EOF\n"
  1. 我嘗試使用以下行提取所需的信息:
a = re.findall(r"nendobj(.*?)W 3\.0",cadena)

試圖獲得:

a = "n216 0 obj\n<</D[2.0 2.0]/S/D>>\nendobj\n217 0 obj\n<</D[2.0 2.0]/S/D>>\nendobj\n218 0 obj\n<<"

但我得到了:

a = []

問題出在a = re.findall(r"nendobj(.*?)W 3\\.0",cadena)但我不知道在哪里。 我嘗試了很多組合都沒有成功。

我很感激任何評論。

問候

在我看來,有兩個問題:

a) 您正在尋找nendobj ,但 N 實際上是換行符\\n 因此,您也不會在輸出中獲得前導 N,因為沒有 N。

b) 由於您要查找的文本跨越了一些換行符,因此您需要re.DOTALL標志

最終代碼:

a = re.findall("endobj(.*?)W 3\.0",cadena, re.DOTALL)

另請注意,將有第二個結果,由 Regex101 確認

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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