python - 在Python中提取其他两个之间的字符串
问题描述
我正在尝试从 fdf(PDF 评论文件)中提取评论。实际上,这是在其他两个之间提取一个字符串。我做了以下事情:
- 我使用以下命令打开 fdf 文件:
import re
import os
os.chdir("currentworkingdirectory")
archcom =open("comentarios.fdf", "r")
cadena = archcom.read()
- 使用打开的文件,我创建了一个名为 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"
- 我尝试使用以下行提取所需的信息:
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 确认。
推荐阅读
- php - 我们需要按日期过滤表格,任何人都知道该怎么做?
- python - Apache-Beam 中 BigQuery 操作的处理速度非常慢
- gitlab - 在 gitlab ci 上执行时找不到测试对象
- wordpress - Wordpress 计数器无法正常工作
- jspdf - 单元格文本颜色拒绝更改 jsdpdf-autotable
- dialogflow-es - Dialogflow 中的 A/B 测试(在同一代理中)
- java - 等式 2 具有不同类型/数据模型的列表
- java - Java hadoop api YarnClient 没有“init()/start()”功能?
- python - 如何在 OpenCV 中纠正裁剪的立体图像?
- amazon-web-services - 如何向 Cloudfront 添加查询字符串参数?