Python3.6使用正则从多行文本中提取RECT间隔内容存入数组
Python3.6 提取多段RECT标记间内容的解决方案
问题原因
原有正则存在两个核心问题:
- 未开启单行模式,
.默认无法匹配换行符,无法跨行捕获内容 - 没有限制匹配终止边界为下一个RECT或MMMM标记,会一次性捕获第一个RECT后的全部内容
正确实现代码
import re # 待处理文本 text = """RECT texttextetxtsd text texttexttexttext RECT texttextetxtwes text texttexttexttext text MMMM""" # 正则匹配:开启单行模式+非贪婪匹配+正向预查限定终止边界 result = re.findall(r'RECT\s*(.*?)(?=\s*(?:RECT|MMMM))', text, flags=re.S) # 输出结果 print(result)
正则说明
RECT\s*:匹配RECT标记及其后的所有空白字符(含换行),跳过标记与内容之间的空白(.*?):非贪婪捕获所有字符,作为最终提取的内容段(?=\s*(?:RECT|MMMM)):正向零宽预查,匹配到下一个RECT或终止标记MMMM的前序位置就停止,不会将标记本身纳入捕获结果flags=re.S:开启单行模式,让.可以匹配换行符,适配多行内容的提取需求
运行输出
输出的数组每个元素对应两个RECT(或最后一个RECT到MMMM)之间的内容,符合预期:
['texttextetxtsd \ntext \ntexttexttexttext', 'texttextetxtwes \ntext \ntexttexttexttext \ntext']
如果需要去除每行末尾的多余空格,可以对结果做二次处理:
processed_result = ['\n'.join(line.rstrip() for line in segment.split('\n')) for segment in result]
内容的提问来源于stack exchange,提问作者Terry Phillips
相关产品推荐
相关产品推荐

