如何在多行模式下用非贪婪正则匹配含指定内容的完整页面?
用Python正则匹配包含指定内容的完整页面
可以通过单个正则表达式实现需求,核心思路是精准匹配以^1开头、到下一个^1结束的完整页面,同时确保页面中包含目标文本H E A D I N G 1。
正则表达式说明
使用以下正则模式(已考虑页面标记的转义和跨换行匹配):
\^1(?:(?!\^1).)*H E A D I N G 1(?:(?!\^1).)*
各部分含义:
\^1:匹配页面起始标记^1(^是正则特殊字符,需转义)(?:(?!\^1).)*:非捕获组,匹配任意字符但不跨过下一个^1标记,确保只在当前页面内匹配H E A D I N G 1:目标匹配文本- 末尾的
(?:(?!\^1).)*:匹配目标文本之后到当前页面结束的剩余内容
Python代码实现
结合latin-1编码文件读取和正则匹配,针对大文件建议用finditer减少内存占用:
import re # 编译正则(re.DOTALL让.匹配换行符,适配多页面内容) page_pattern = re.compile(r'\^1(?:(?!\^1).)*H E A D I N G 1(?:(?!\^1).)*', re.DOTALL) # 读取latin-1编码的大文件 with open('target_file.txt', 'r', encoding='latin-1') as f: file_content = f.read() # 遍历所有匹配的完整页面 for match in page_pattern.finditer(file_content): full_target_page = match.group() # 此处添加你的后续处理逻辑 print("找到匹配页面:") print(full_target_page[:300]) # 示例:打印页面前300字符
关键注意事项
re.DOTALL参数必须添加,否则.无法匹配换行符,会导致页面内容匹配不完整- 非捕获组
(?:...)和负向预查(?!\^1)组合,避免匹配跨页面的内容,确保每个结果都是独立完整的页面 - 若文件过大导致内存不足,可考虑分块处理但需额外处理跨块的页面边界,不过一次性读入内存的方式在多数场景下效率更高,能替代原拆分分页方法
内容的提问来源于stack exchange,提问作者ostpoller
相关产品推荐
相关产品推荐

