Python如何通过匹配数字的正则表达式提取匹配项之间的文本
Python 基于分隔符正则拆分提取中间文本实现方案
问题原因
你之前的拆分逻辑不生效,核心是两个正则使用误区:
- 默认模式下
^和$仅匹配整个文本字符串的首尾位置,无法识别单独占行的456、789这类中间位置的数字行,自然没法完成拆分 - 正则写法
(\d){3}存在冗余捕获组,会额外捕获单个数字字符混入拆分结果,且没有处理拆分后残留的空值、换行空白
可直接运行的正确实现
import re # 待处理的目标文本 text = """123 text I want to extract is here. 456 I also need this part 789 and this """ # 核心:开启re.M多行模式,让^$匹配每一行的首尾位置 split_res = re.split(r'^\d{3}$', text, flags=re.M) # 过滤拆分产生的空项,去除每个文本段首尾多余的空白、换行 final_res = [segment.strip() for segment in split_res if segment.strip()] print(final_res)
运行后输出完全符合预期:
['text I want to extract is here.', 'I also need this part', 'and this']
复杂场景适配说明
- 如果实际业务里,三位数字所在行可能前后存在空格、制表符等空白字符,可以把拆分正则调整为
r'^\s*\d{3}\s*$',不需要修改其他逻辑就能兼容 - 如果后续需要同时保留分隔符(也就是对应的三位数字),只需要给正则加对应捕获组即可,核心的
re.M多行模式配置不变 - 这个方案完全基于已有的「匹配数字标识」的正则规则实现,不需要额外编写匹配中间文本的规则,适配复杂业务场景要求
内容的提问来源于stack exchange,提问作者Amy D
相关产品推荐
相关产品推荐

