如何在特定模式前合并最后两行非空行?
问题描述
原始文本:
1.58% 0009 1991 ///////////////////////// Phil ttr0018 1991 /////////////////////////
期望将分隔线/////////////////////////前的最后两行非空行合并,得到输出:
1.58% 0009 1991 ///////////////////////// Phil ttr0018 1991 /////////////////////////
尝试了以下正则但未生效:
查找:^(\h*\S.*)(?=\R+(?:\h*\S.*\R+)?/{24})
替换:\1
问题分析与解决方案
你的正则没起效,核心是两个问题:
- 匹配范围错误:只捕获了单行内容,根本没选中需要合并的两行之间的换行符,自然没法把换行替换成空格实现合并。
- 断言逻辑冗余混乱:
(?:\h*\S.*\R+)?这个可选分组会让正则的匹配边界模糊,没法精准定位到分隔线前的最后两行。
正确的正则写法
要精准匹配分隔线前的最后两行非空行,把它们之间的换行换成空格,用以下查找替换规则:
- 查找:
^(\h*\S.*)\R(\h*\S.*)\R(?={24}) - 替换:
$1 $2\n
规则解释
^(\h*\S.*):捕获分隔线前倒数第二行的非空内容(^锁定行首,\h*\S.*确保行内有非空白字符)\R:匹配两行之间的换行(兼容\n或\r\n格式)(\h*\S.*):捕获分隔线前最后一行的非空内容\R(?={24}):匹配最后一行和分隔线之间的换行,通过正向断言(?={24})确保后面紧跟24个斜杠,避免误匹配其他行- 替换时把两行之间的换行换成空格,保留最后一行与分隔线的换行,正好实现合并效果
内容的提问来源于stack exchange,提问作者Pubg Mobile
相关产品推荐
相关产品推荐

