python 正则匹配bytes

网上找了半天都只有关于字符串的正则匹配,想到bytes的数据前面加了b,那么在匹配时是不是也要呢?直接上示例:

import re
data=b'blob 2199\x00<?php\n\nif (isset($_GET[\'page\'])) {\n\t$page = $_GET[\'page\'];\n} else {\n\t$page = "home";\n}\n\n$file = "templates/" . $page . ".php";\n\n// I heard \'..\' is dangerous!\nassert("strpos(\'$file\', \'..\') === false") or die("Detected hacking attempt!");\n\n// TODO: Make this look nice\nassert("file_exists(\'$file\')") or die("That file doesn\'t exist!");\n\n?>\n<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset="utf-8">\n\t\t<meta http-equiv="X-UA-Compatible" content="IE=edge">\n\t\t<meta name="viewport" content="width=device-width, initial-scale=1">\n\t\t\n\t\t<title>My PHP Website</title>\n\t\t\n\t\t<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />\n\t</head>\n\t<body>\n\t\t<nav class="navbar navbar-inverse navbar-fixed-top">\n\t\t\t<div class="container">\n\t\t    \t<div class="navbar-header">\n\t\t    \t\t<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">\n\t\t            \t<span class="sr-only">Toggle navigation</span>\n\t\t            \t<span class="icon-bar"></span>\n\t\t            \t<span class="icon-bar"></span>\n\t\t            \t<span class="icon-bar"></span>\n\t\t          \t</button>\n\t\t          \t<a class="navbar-brand" href="#">Project name</a>\n\t\t        </div>\n\t\t        <div id="navbar" class="collapse navbar-collapse">\n\t\t          \t<ul class="nav navbar-nav">\n\t\t            \t<li <?php if ($page == "home") { ?>class="active"<?php } ?>><a href="?page=home">Home</a></li>\n\t\t            \t<li <?php if ($page == "about") { ?>class="active"<?php } ?>><a href="?page=about">About</a></li>\n\t\t            \t<li <?php if ($page == "contact") { ?>class="active"<?php } ?>><a href="?page=contact">Contact</a></li>\n\t\t\t\t\t\t<!--<li <?php if ($page == "flag") { ?>class="active"<?php } ?>><a href="?page=flag">My secrets</a></li> -->\n\t\t          \t</ul>\n\t\t        </div>\n\t\t    </div>\n\t\t</nav>\n\t\t\n\t\t<div class="container" style="margin-top: 50px">\n\t\t\t<?php\n\t\t\t\trequire_once $file;\n\t\t\t?>\n\t\t\t\n\t\t</div>\n\t\t\n\t\t<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js" />\n\t\t<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" />\n\t</body>\n</html>'
data = re.sub(rb'blob \d+\x00',b'',data)
# data=re.findall(rb'blob \d+\x00',data)
print(data)
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python中使用正则表达式处理PDF文件中的图片是可行的。首先,需要导入Python的re模块。然后,可以使用re模块的findall()函数来找到PDF文件中的图片路径。 在使用正则表达式处理PDF图片时,首先需要了解PDF文件的结构。PDF文件中的图片通常被存储为二进制数据,然后通过一些标签和指令来指示其在页面上的位置和显示方式。 通过使用re模块的findall()函数,我们可以编写正则表达式来匹配PDF文件中的图片路径。一般来说,图片路径在PDF文件中以'/XObject'和'/Image'关键字开始,以'endobj'关键字结束。我们可以编写一个正则表达式来匹配这个模式。 以下是一个示例代码,用来演示如何使用正则表达式找到PDF文件中的图片路径: ```python import re def find_image_paths(pdf_file_path): # 读取PDF文件内容 with open(pdf_file_path, 'rb') as file: pdf_content = file.read() # 编写正则表达式找到图片路径 pattern = re.compile(rb'/XObject.*?/Image.*?endobj', re.DOTALL) image_paths = pattern.findall(pdf_content) return image_paths # 调用函数示例 pdf_file = "example.pdf" image_paths = find_image_paths(pdf_file) print(image_paths) ``` 这个示例中,我们首先读取PDF文件的内容,并将其作为字符串传递给正则表达式的findall()函数。findall()函数会找到所有匹配正则表达式的字符串,并返回一个包含所有匹配项的列表。在这个示例中,返回的列表中的每个项都是一个包含图片路径的字符串。 需要注意的是,正则表达式的编写需要根据具体的PDF文件格式进行调整。根据PDF文件的结构和内容的差异,正则表达式的模式可能会有所不同。因此,在实际应用中,需要根据具体的PDF文件来编写相应的正则表达式。 ### 回答2: Python 提供了许多库用于处理 PDF 文件和图片,同时也可以使用正则表达式来对 PDF 中的图片进行处理。 首先,可以使用 PyPDF2 库来读取 PDF 文件中的图片。PyPDF2 库允许我们读取和操作 PDF 的内容,包括图片。通过遍历PDF的每一页,可以找到并提取页面中的所有图片。 其次,正则表达式可以帮助我们在 PDF 文本中匹配图片的信息。通常,PDF 中的图片信息是以字节编码的形式存储的。可以使用正则表达式来搜索并提取图片的字节编码,然后将其转换为图像格式,如JPEG或PNG。 例如,假设有一个PDF文件“example.pdf”,想要提取其中的图片。可以首先使用 PyPDF2 库读取该文件,然后遍历每一页。在遍历的过程中,可以使用正则表达式搜索包含图片的位置和字节编码的字符串。 接着,可以使用 Python 的内置库(PyPDF2 和 re)来编写代码,示例代码如下: ```python import PyPDF2 import re def extract_images_from_pdf(file_path): # 读取 PDF 文件 with open(file_path, 'rb') as file: pdf = PyPDF2.PdfFileReader(file) # 遍历每一页 for page_num in range(pdf.numPages): page = pdf.getPage(page_num) content = page.extract_text() # 使用正则表达式匹配图片的字节编码 image_patterns = re.findall(r'(?<=/FlateDecode).*?(?=/EI)', content) # 处理图片 for pattern in image_patterns: # 提取字节编码 image_bytes = re.findall(r'\w+', pattern) # 将字节编码转换为图像格式 image_data = bytes.fromhex(''.join(image_bytes)) # 处理图像数据,如保存图像或进行其他操作 # 测试代码 file_path = 'example.pdf' extract_images_from_pdf(file_path) ``` 在这个示例代码中,我们依次遍历了 PDF 的每一页,并使用正则表达式搜索包含图片的位置和字节编码的字符串。然后,我们将字节编码转换为图像格式,可以根据需要进行进一步的处理。 需要注意的是,PDF 文件的结构复杂,其中图片的存储方式可能因文件而异。因此,对于不同的 PDF 文件,可能需要调整正则表达式以匹配正确的图片信息。 总结起来,Python 提供了许多库和工具来处理 PDF 文件和图片,结合正则表达式的使用,可以实现对 PDF 中图片的提取和处理。 ### 回答3: Python是一种高级编程语言,具有强大的正则表达式功能,可以用于处理PDF文件中的图片。 首先,我们需要使用适当的Python库来处理PDF文件,例如PyPDF2或PDFMiner,这些库可以帮助我们提取PDF文件中的文本和图片。 然后,使用正则表达式来搜索并提取图片。正则表达式是一种强大的模式匹配工具,可以帮助我们找到特定格式的字符串,如图片的路径或标记。 在PDF文件中,图片通常以一系列特定的标记(如/Images或/XObject)进行引用。我们可以使用正则表达式来搜索这些标记,并提取出对应的图片路径或标记。 以下是一个简单的示例代码,演示如何使用Python正则表达式提取PDF文件中的图片路径: ```python import re def extract_image_paths(pdf_file): with open(pdf_file, 'rb') as f: contents = f.read() # 使用正则表达式搜索图片路径 pattern = r"/(Images|XObject) <<(.*?)>>" matches = re.findall(pattern, contents) image_paths = [] for match in matches: # 提取图片路径 path_pattern = r"/(Im|X)\d+" path = re.search(path_pattern, match[1]) if path: image_paths.append(path.group()) return image_paths pdf_file = "example.pdf" image_paths = extract_image_paths(pdf_file) print(image_paths) ``` 在这个示例代码中,我们首先使用“rb”模式读取PDF文件的二进制内容。然后,我们使用正则表达式搜索包含图片路径的标记,如/Images或/XObject。最后,我们提取出路径,将其存储在一个列表中。 请注意,上述代码仅提取了图片的路径。如果需要处理图片本身,我们可以使用Python的其他库,如Pillow或OpenCV,来读取和处理这些图片。 总结而言,Python中的正则表达式是一种非常强大和灵活的工具,可以用于从PDF文件中提取图片路径或图像标记。使用适当的库和正则表达式,我们可以轻松地处理和操作PDF文件中的图片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值