如何用单个正则表达式提取指定边界间的任意行数文本?
单个正则提取两种场景的多行内容
目标文本:
" Sample text 1! ,,Sample&.,? text 2? \ -message 32 Another sample text 3 ... sample text 4& !Sample text 5% \
需求说明
需要用单个正则完成两种场景的内容提取:
- 场景1:提取位于
"\n和\之间的所有行 - 场景2:提取位于
message\n和\之间的所有行
两段内容均可能包含任意行数,目标内容需放在捕获组中,且匹配需以\结尾。
当前问题
你使用的正则("\n|message\n)+(.*\n.*\n)仅支持匹配固定两行,无法适配任意行数的场景,也未添加结尾匹配条件。
解决方案
最终正则表达式(需开启多行模式)
(?:^"$|^-message$)\n((?:.*\n)*?)(?=^\\$)
正则结构解释
(?:^"$|^-message$):非捕获组,精准匹配开头的标记行——要么是单独一行的",要么是单独一行的-message\n:匹配标记行后的换行分隔符((?:.*\n)*?):核心捕获组,匹配任意多行内容:(?:.*\n):非捕获的单行匹配(包含行尾换行)*?:惰性量词,确保匹配到第一个结束标记\就停止,避免过度匹配
(?=^\\$):正向预查,确保捕获内容的下一行是单独的\,作为结束边界
匹配结果
- 场景1捕获内容:
Sample text 1! ,,Sample&.,? text 2? - 场景2捕获内容:
32 Another sample text 3 ... sample text 4& !Sample text 5%
内容的提问来源于stack exchange,提问作者si ma
相关产品推荐
相关产品推荐

