You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则匹配含指定标识的章节时如何忽略后续无关章节内容?

解决方案

调整正则表达式,增加终止匹配的边界条件即可,修正后的代码如下:

import re
text = '7\n\x0c\n7.\tA B C\n\n7.1\tbla bla bla .\n\n7.2\tanother bla bla \n\n7.3\tand another one.\n\n8.\tX Y Z\n\n8.1\tha ha ha \n\n(a)\thohoho ;\n\n(b)\thihihi,\n\n8'
print(re.findall(r'^\d+\.\s*A B C.*?(?=\n\d+\.|\Z)', text, flags=re.M|re.S)[0])

运行后即可得到预期输出。


原理解释

  1. 新增re.S(DOTALL)标记:让.符号可以匹配换行符,简化跨行匹配的写法
  2. .*?为惰性匹配:不会无限制向后贪婪吞噬内容
  3. 终止边界(?=\n\d+\.|\Z):正向先行断言,当匹配到下一个顶级章节开头(格式为\n数字.) 或者文本结束位置\Z时就停止匹配,自动截断后续其他章节的内容,不需要提前写死章节编号。

原正则错误原因

之前的正则没有设置匹配终止条件,(?:\n\n.+)*会一直匹配到文本末尾,只要后续存在换行加非空内容就会持续匹配,因此会把下一个章节8的内容也全部包含进去。

内容的提问来源于stack exchange,提问作者Wiliam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:54:03