Python正则提取带空格变体的1.x编号列表项对应文本
正则提取解决方案
问题分析
你需要提取所有形如1.1、1 . 3这类编号后的文本,原正则因为依赖“编号+内容+编号”的匹配逻辑,导致最后一个编号后的内容无法捕获,且中间部分匹配不完整。
修正后的正则方案
使用正向预查来匹配编号后的内容,同时兼容编号中任意空格的变体:
import re text = "some text before pattern 1.1 text_1_here 1.2 text_2_here 1 . 3 text_3_here 1. 4 text_4_here 1 .5 text_5_here 1.10 last_text_here 1.23 text after pattern" result = re.findall(r'1\s*\.\s*\d+\s*(.*?)(?=\s*1\s*\.\s*\d+|$)', text) print(result)
正则规则拆解
1\s*\.\s*\d+:匹配编号部分,\s*允许.前后出现任意数量的空格,\d+匹配一位或多位数字(支持1.10这类多位数编号)(.*?):非贪婪匹配编号后的文本,避免过度匹配后续内容(?=\s*1\s*\.\s*\d+|$):正向预查,确保匹配到的文本后面跟着下一个编号或者文本结尾,这样就能捕获所有编号后的内容,包括最后一个编号到结尾前的文本
输出结果
运行上述代码后,输出与预期一致:
['text_1_here ', 'text_2_here ', 'text_3_here ', 'text_4_here ', 'text_5_here ', 'last_text_here ']
内容的提问来源于stack exchange,提问作者Prince
相关产品推荐
相关产品推荐

