修改正则表达式实现指定账户段的多次精准匹配提取
解决多组SUBH2002078568/SUBF2002078568段的正则提取问题
你的原正则问题出在[\s\S]+是贪婪匹配模式,它会尽可能匹配最长的内容——当文件里有多组SUBH/SUBF段时,会从第一个SUBH2002078568一直匹配到最后一个SUBF2002078568,把中间所有无关的组都包含进去。
给你两种修改方案:
方案1:非贪婪匹配(简单直接)
把贪婪的+改成非贪婪的+?,正则变为:
(?<=SUBH2002078568)[\s\S]+?(?=SUBF2002078568)
这个正则会匹配到**第一个遇到的SUBF2002078568**就停止,刚好对应每组SUBH和它后面紧邻的SUBF之间的内容,全局匹配就能提取所有组的目标内容。
方案2:严格排除无关标识(更严谨)
如果担心中间内容里可能出现类似SUBH2002078568或SUBF2002078568的片段(虽然概率低),可以用负向预查确保中间不会出现这些标识:
(?<=SUBH2002078568)(?:(?!SUBH2002078568|SUBF2002078568)[\s\S])+(?=SUBF2002078568)
它会逐个字符检查,只要没遇到目标标识就继续匹配,完全避免跨组的情况。
使用时,在支持正则全局匹配的工具(比如Python的re.findall()、Notepad++的“查找全部”)里运行这个正则,就能得到每一组的精准内容。
内容的提问来源于stack exchange,提问作者Syafiqur Rahman
相关产品推荐
相关产品推荐

