【问题标题】:Merge lines after specific word till another specific word in Notepad++在记事本++中将特定单词之后的行合并到另一个特定单词
【发布时间】:2020-09-09 08:14:33
【问题描述】:

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

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) 合并行,但没有运气。感谢您的帮助:)

【问题讨论】:

  • 你可以在前面加上一个可选的换行符\R?(\+)\R([0-9]{1,2})\Rregex101.com/r/GaVuD9/1
  • 这些词是什么?您的 (\+)\n([0-9]{1,2})\n) 模式没有文字。
  • 如果您感到困惑,我很抱歉。我只是想从 GSM 合并到 '最终结果应该是 GSM+38+38+32+1' 而不会弄乱上一行或下一行。

标签: regex notepad++ line


【解决方案1】:

使用\G 锚点匹配字符串开头的GSM 后,您可以获得所有连续匹配。您将值保留在捕获组中,并在其间匹配一个换行符,这样它们就不是替换的一部分。

查找内容:

(?:^GSM\K\R(?=[\r\n+0-9]+\R')|\G)(\+)\R([0-9]{1,2})\R

替换为:

$1$2

Regex demo

说明

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

【讨论】:

    【解决方案2】:
    ^(.*[^'])(\n)
    

    对于您的示例,这将起作用。

    【讨论】:

    • 您的解决方案不符合问题中列出的要求,即将行从一个特定的单词组合到另一个特定的单词
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2021-08-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多