多线搜索&在Notepad ++

时间:2017-06-20 09:36:19

标签: regex replace editor notepad++ text-editor

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

第一件事:

要提取foo_abc(以及类似的每一行,例如goo_zxy和doo_fgh),我需要删除一些附加 BEFORE foo_abc和的文字 AFTER foo_abc。

例如:

  

TEXTBEFORE foo_abc的 TEXTAFTER

     

TEXTBEFORE goo_zxy的 TEXTAFTER

     

TEXTBEFORE doo_fgh的 TEXTAFTER

获得:

  

foo_abc

     

goo_zxy

     

doo_fgh

第二件事:

我现在需要在 之前添加不同的文字 ,再次在 foo_abc之后添加 。 像这样:

  

TEXTA foo_abc的 TEXTB

所以我所做的是:

  

查找:^

     

替换: TextA

     

查找:$

     

替换: TextB

哪种方法效果很好,但我必须执行查找并替换 TWICE ,这不是很有效。为避免这种情况,我发现了这一点:Multiple word search and replace in notepad++

如此应用:

  

查找:(^)|($)

     

替换:(?1 TextA )(?2 TextB

但它并没有太好用。

AND,如上所述,我需要这个适用于 EACH和每一行 : 例如:

  

foo_abc

     

goo_zxy

     

doo_fgh

我需要在每个行的开头插入 TextA ,并在每行的末尾插入 TextB ,如下所示:

  

TEXTA foo_abc的 TEXTB

     

TEXTA goo_zxy的 TEXTB

     

TEXTA doo_fgh的 TEXTB

可以这样做吗? (是的,我实际上需要这样做超过10000行,而不仅仅是3行,并且想要一种有效的方法)。

我错过了更快的方法来完成所有这些吗?也许通过在 1st Thing ' 1st Thing '中进行搜索和替换。在 TEXTBEFORE TEXTAFTER 上,分别与 TextA TextB 一起进行?

非常感谢。

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

2 个答案:

答案 0 :(得分:2)

有两种情况:1)您想要替换TEXTBEFORETEXTAFTER,无论其中任何一个存在,2)TEXTBEFORETEXTAFTER必须存在

场景1

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

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

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

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

<强>详情

  • ^(TEXTBEFORE) - 在一行开头匹配并捕获到第1组TEXTBEFORE
  • | - 或
  • TEXTAFTER$ - 在一行末尾匹配TEXTAFTER

替换模式

  • (?{1} - 如果第1组匹配,那么
    • TextA - 返回TextA
    • : - 其他
    • TextB - 替换为TextB
  • ) - 条件替换模式的结束。

enter image description here

场景2

如果您需要匹配以某些文字开头并以其他文字结尾的行,请使用

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

<强>详情:

  • ^ - 开始行
  • TEXTBEFORE - 此处有一些文字
  • (.*?) - 第1组(可以用替换模式中的$1反向引用引用)匹配除了换行符之外的任何0+字符
  • TEXTAFTER - 有些文字在......
  • $ - 行尾。

答案 1 :(得分:1)

尝试:

TEXTBEFORE(.+?)TEXTAFTER

替换为

TextA$1TextB

请参阅this示例和说明

如果你需要找到整行:

^TEXTBEFORE(.+?)TEXTAFTER$

替换与以前相同。