Python正则表达式如何提取文本文件中以BEGIN/END标记包裹的重复文本块
问题原因
你使用的正则默认开启贪婪匹配,.*会尽可能匹配最长的符合规则的字符串,因此会从文档第一个----BEGIN---开始,一直匹配到最后一个---END结束,最终返回整个文档内容而非独立块。
解决方案
将正则修改为非贪婪匹配,只需在.*后添加?即可,修正后的代码如下:
import re block_search = re.compile(r'----BEGIN---.*?---END', re.DOTALL) with open(file, 'r', encoding='utf-8') as f: text = f.read() result = re.findall(block_search, text)
可选优化
如果你不需要提取结果里包含----BEGIN---和---END标记,可给中间内容添加分组,直接获取块的正文:
# 分组后findall会仅返回分组内匹配的内容 block_search = re.compile(r'----BEGIN---(.*?)---END', re.DOTALL)
内容的提问来源于stack exchange,提问作者Clovis
相关产品推荐
相关产品推荐

