如何将 Notepad++ 中字符串行之间的文本行合并为一行代码,同时保留字符串分隔符之外的行?

如何将 Notepad++ 中字符串行之间的文本行合并为一行代码,同时保留字符串分隔符之外的行?

我在 Notepad++ 中保存了数百页文本格式的内容,这些内容来自一个 pdf 文件。文件中的每一页都有不同数量的行,但它们都包含“TARGET_LINE”和“LAST_LINE”的行。这两个字符串之间是几行文本。虽然“TARGET_LINE”和“LAST_LINE”总是会出现,但两者之间的行数不同 - 有时中间有四行,如下所示,有时有两行,等等。

我需要一个搜索和替换公式,1)保留 TARGET_LINE 上方的行,但 2)将“TARGET_LINE”和“LAST_LINE”之间的所有行合并为一个单独的代码行,包括前缀和后缀行,以便......

abc
123
xyz
TARGET_LINE, 
second line lfutdytdyt
3rd line x;lkhr;lkj
fourth klufhkgfk
5th ;lkjk;lkj;lj
LAST_LINE,
def
456
TARGET_LINE, 
lfutdytdyt
klkrjtlkj
LAST_LINE,

,,, 变成:

abc
123
xyz
TARGET_LINE, second line lfutdytdyt 3rd line x;lkhr;lkj fourth klufhkgfk 5th ;lkjk;lkj;lj LAST_LINE,
def
456
TARGET_LINE, lfutdytdyt klkrjtlkj LAST_LINE,

(每行之间最好有一个逗号,但不是必须的):

提前感谢您的时间和帮助。

答案1

警告:

仅当您将光标放在包含以下内容的第一行的开头时,此操作才有效TARGET_LINE


  • Ctrl+H
  • 找什么:(?:^(TARGET_LINE),\h*|\G)((?:(?!LAST_LINE).)*?)\R
  • 用。。。来代替:$1$2,
  • 取消选中 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Replace all

解释:

(?:                     # non capture group            
    ^                       # beginning of line
    (TARGET_LINE)           # group 1
    ,\h*                    # a comma followed by 0 or more horizontal spaces
  |                     # OR
    \G                      # restart fro mlast match position
)                       # end group
(                       # group 2
    (?:                     # non capture group
        (?!LAST_LINE)           # negative lookahead, make sure we haven't "LAST_LINE" after
        .                       # any character but newline
    )*?                     # end group, may appear 0 or more times, not greedy
)                       # end group
\R                      # any kind of linebreak (i.e. \r, \n, \r\n)

替代品:

$1          # content of group 1
$2          # content of group 2
,           # a comma followed by a space

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

相关内容