合并特定单词后的行,直到记事本++中的另一个特定单词

问题描述

我一直在尝试将一个特定单词到另一个特定单词的行组合起来:

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

Regex demo

enter image description here

说明

  • (?:非捕获组
    • ^GSM\K\R匹配GSM,然后\K会忘记当前匹配的内容,然后匹配换行符
    • (?=[\r\n+0-9]+\R')正向前进,断言以下是允许的字符,换行符'
    • |
    • \G在上一场比赛的末尾或开始时声明位置
  • )关闭群组
  • (\+)捕获第1组,匹配+
  • \R匹配换行符
  • ([0-9]{1,2})捕获第2组,匹配1-2位数字
  • \R匹配换行符
,
^(.*[^'])(\n)

以您的示例为例。