如何用正则捕获仅带起始模式的多段多行文本块
正则匹配方案
你可以用非贪婪匹配+正向前瞻的写法实现需求,正确正则如下:/-{37}\s*([\s\S]*?)(?=\s*-{37}|\s*$)/gm
正则各部分说明
-{37}:匹配作为条目分隔符的37个连续短横线\s*:匹配分隔符后多余的空白字符(包括换行、空格),避免捕获内容开头带多余空行([\s\S]*?):捕获分组,非贪婪匹配所有字符(含换行),直到触发终止条件(?=\s*-{37}|\s*$):正向肯定前瞻,规定终止条件:要么后续出现带可选空白的下一组37个短横线,要么到文件末尾;前瞻不会消耗字符,不影响下一次匹配识别分隔符
如果你的正则引擎支持单行模式(s标记),可以把[\s\S]替换为.,写法更简洁:/-{37}\s*(.*?)(?=\s*-{37}|\s*$)/gms
代码示例(以JavaScript为例)
const largeText = "你的大文本文件内容"; const entryRegex = /-{37}\s*([\s\S]*?)(?=\s*-{37}|\s*$)/gm; const entryList = []; let matchResult; while ((matchResult = entryRegex.exec(largeText)) !== null) { // trimEnd可根据需求选择是否添加,用于移除条目末尾多余的空白 entryList.push(matchResult[1].trimEnd()); }
最终entryList就是你需要的仅包含各条目内容的数组。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

