我在 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
截图(之前):
截图(之后):