Notepad++ 中每行开头和结尾的多行搜索和替换

Multi-line search & replace for Beginning and End of Each Line in Notepad++

首先,我希望能够做两件事:

第一件事:

要提取 foo_abc(以及类似地每隔一行,例如 goo_zxy 和 doo_fgh),我需要删除一些附加的文本 之前 foo_abc,和之后 foo_abc.

例如:

TEXTBEFOREfoo_abcTEXTAFTER

TEXTBEFOREgoo_zxyTEXTAFTER

TEXTBEFOREdoo_fghTEXTAFTER

获得:

foo_abc

goo_zxy

doo_fgh

第二件事:

我现在需要在 beforeafter 后附加不同的文本 foo_abc 再一次。 像这样:

TextAfoo_abcTextB

所以我所做的是:

Find: ^

Replace: TextA

Find: $

Replace: TextB

效果很好,但我必须执行查找和替换 TWICE,效率不高。为了避免这种情况,我发现了这个:Multiple word search and replace in notepad++

并像这样应用它:

Find: (^)|($)

Replace: (?1TextA)(?2TextB)

但效果不是很好。

并且,如前所述,我需要它为 EACH 和每一行 工作: 例如:

foo_abc

goo_zxy

doo_fgh

我需要在每一行的开头插入 TextA,在每一行的末尾插入 TextB,就像这样:

TextAfoo_abcTextB

TextAgoo_zxyTextB

TextAdoo_fghTextB

这能做到吗? (是的,我实际上需要对超过 10000 行执行此操作,而不仅仅是 3 行并且想要一种有效的方法来执行此操作)。

我是否错过了完成所有这些操作的更快方法?也许通过在 TEXTBEFORETEXTAFTER 上的“1st Thing”中执行搜索和替换,使用分别 TextATextB?

非常感谢。

编辑:是的,它们是文字字符串。是的,它们确实包含特殊字符,因为它们代表 URL.

的一部分

有两种情况:1) 您想要替换 TEXTBEFORETEXTAFTER,而不管它们是否存在,2) TEXTBEFORE 和 [=11] =]必须存在

场景一

您可以为此使用单个搜索和替换操作:

查找内容^(TEXTBEFORE)|TEXTAFTER$
替换为(?{1}TextA:TextB)

注意:如果 TEXTBEFORETEXTAFTER 包含特殊字符,您可以使用

查找内容^(\QTEXTBEFORE\E)|\QTEXTAFTER\E$

详情:

  • ^(TEXTBEFORE)- 在行首匹配并捕获到第 1 组 TEXTBEFORE
  • | - 或
  • TEXTAFTER$ - 匹配行尾的 TEXTAFTER

替换模式:

  • (?{1} - 如果第 1 组匹配,则
    • TextA - return TextA
    • : - 否则
    • TextB - 替换为 TextB
  • ) - 条件替换模式结束。

场景 2

如果您需要匹配以某些文本开头并以另一个文本结尾的行,请使用

查找内容^TEXTBEFORE(.*?)TEXTAFTER$
替换为TextATextB

详情:

  • ^ - 行首
  • TEXTBEFORE - 这里有一些文字
  • (.*?) - 第 1 组(可以用替换模式中的 </code> 反向引用来引用)匹配除换行字符 </li> 以外的任何 0+ 个字符 <li><code>TEXTAFTER - 一些文字...
  • $ - 行尾。

尝试:

TEXTBEFORE(.+?)TEXTAFTER

替换为

TextATextB

参见 this 示例和解释

如果您需要查找整行:

^TEXTBEFORE(.+?)TEXTAFTER$

替换同上。