问题描述
EOD++::N'
GSM
+
38
+
38
+
32
+
1
'
USF+1+ABCDEFGH'
输出应为:
EOD++::N'
GSM+38+38+32+1'
USF+1+ABCDEFGH'
我尝试使用正则表达式 (\+)\n([0-9]{1,2})\n)
合并行,但是没有运气。感谢您的帮助:)
解决方法
使用GSM
锚在字符串开头匹配\G
后,可以获得所有连续的匹配项。您可以将值保留在捕获组中,并在它们之间匹配换行符,以使它们不属于替换行。
查找内容:
(?:^GSM\K\R(?=[\r\n+0-9]+\R')|\G)(\+)\R([0-9]{1,2})\R
替换为:
$1$2
说明
-
(?:
非捕获组-
^GSM\K\R
匹配GSM,然后\K
会忘记当前匹配的内容,然后匹配换行符 -
(?=[\r\n+0-9]+\R')
正向前进,断言以下是允许的字符,换行符'
-
|
或 -
\G
在上一场比赛的末尾或开始时声明位置
-
-
)
关闭群组 -
(\+)
捕获第1组,匹配+ -
\R
匹配换行符 -
([0-9]{1,2})
捕获第2组,匹配1-2位数字 -
\R
匹配换行符
^(.*[^'])(\n)
以您的示例为例。