我想将个人PDF文档从一个文件中分离出来。到目前为止,它通过使用以下代码来处理结构化的文件:%PDF- .... %%EOF ... %PDF- .... %%EOF:
REGEX_PDF = b'%PDF\-.+?%%EOF'
pdfDocuments = re.findall( REGEX_PDF, fileContent, re.DOTALL )现在,我需要改变软件,使之也能与扩展的PDF一起工作。这导致了这样的文件结构:%PDF- .... %%EOF ... %%EOF ... %%EOF ... %PDF- .... %%EOF。因此,我需要匹配从PDF标签的子字符串,直到最后%%EOF标签之前的下一个PDF标签。我最好的猜测是:
REGEX_PDF = b'%PDF\-.+(?!%PDF\-).+%%EOF'但这似乎行不通。相反,只有一个子字符串匹配从第1 %PDF标签顶部,最后%%EOF标签。有人知道错误在哪里吗?
谢谢你,托马斯
发布于 2021-09-07 07:06:49
您可以在这里依赖“开始分隔符”,并使用
re.split(rb'(?!\A)(?=%PDF-)', fileContent)
re.findall(rb'%PDF-.*?(?=%PDF-|\Z)', fileContent, re.S)
re.findall(rb'%PDF-[^%]*(?:%(?!PDF-)[^%]*)*', fileContent)见regex #1演示,regex #2演示和regex #3演示。
(?!\A)(?=%PDF-)正则表达式匹配一个非起始位置的位置,该位置紧跟在%PDF-之后。
%PDF-.*?(?=%PDF-|\Z)模式匹配%PDF-,然后任何零或多个字符尽可能少,直到最左边出现%PDF-或字符串末尾。%PDF-[^%]*(?:%(?!PDF-)[^%]*)*几乎是一样的,但是它不检查右侧是否有%PDF- (在这里,(?=%PDF-|\Z)前瞻性检查被内置到.*?模式中(“已往”))。
https://stackoverflow.com/questions/69083676
复制相似问题