Python正则表达式提取--分隔文本遇问题,请求排查
正则表达式匹配问题分析与解决
你的问题核心是贪婪匹配导致的分组错误:
原正则里的.*是贪婪模式,会尽可能多地匹配字符,包括后续的--+分隔符。这就导致第一个(.*)直接匹配到了最后一个--+之前的所有内容,后面两个分组根本无法捕获到目标文本,最终整个正则匹配了全部输出内容。
修正方案
将贪婪匹配的.*改为非贪婪匹配的.*?,同时可以加上\s*处理分隔符前后的空白/换行,确保提取的内容干净。修正后的正则表达式和代码如下:
import re def parse_ib_write_bw(mystr): output = dict() # 非贪婪匹配+处理分隔符前后空白 match = re.search(r'--+\s*(.*?)\s*--+\s*(.*?)\s*--+\s*(.*?)\s*--+', mystr, re.DOTALL) if match: print(match.group(1)) print(match.group(2)) print(match.group(3)) # 示例测试 my_str = """ -- 第一段文本 跨多行内容 -- 第二段文本内容 -- 第三段文本内容 -- """ parse_ib_write_bw(my_str)
关键细节解释
.*?非贪婪匹配:只会匹配到下一个--+分隔符为止,不会吃掉后续的分隔符,保证每个分组对应一段目标文本。\s*:匹配分隔符前后的任意空白字符(包括换行、空格),避免提取的内容带多余的空白。re.DOTALL:保持不变,让.可以匹配换行符,支持处理多行的文本内容。
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

