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
第二件事:
我现在需要在 before 和 after 后附加不同的文本 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 行并且想要一种有效的方法来执行此操作)。
我是否错过了完成所有这些操作的更快方法?也许通过在 TEXTBEFORE 和 TEXTAFTER 上的“1st Thing”中执行搜索和替换,使用分别 TextA 和 TextB?
非常感谢。
编辑:是的,它们是文字字符串。是的,它们确实包含特殊字符,因为它们代表 URL.
的一部分
有两种情况:1) 您想要替换 TEXTBEFORE
或 TEXTAFTER
,而不管它们是否存在,2) TEXTBEFORE
和 [=11] =]必须存在
场景一
您可以为此使用单个搜索和替换操作:
查找内容:^(TEXTBEFORE)|TEXTAFTER$
替换为:(?{1}TextA:TextB)
注意:如果 TEXTBEFORE
和 TEXTAFTER
包含特殊字符,您可以使用
查找内容:^(\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$
替换同上。
首先,我希望能够做两件事:
第一件事:
要提取 foo_abc(以及类似地每隔一行,例如 goo_zxy 和 doo_fgh),我需要删除一些附加的文本 之前 foo_abc,和之后 foo_abc.
例如:
TEXTBEFOREfoo_abcTEXTAFTER
TEXTBEFOREgoo_zxyTEXTAFTER
TEXTBEFOREdoo_fghTEXTAFTER
获得:
foo_abc
goo_zxy
doo_fgh
第二件事:
我现在需要在 before 和 after 后附加不同的文本 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 行并且想要一种有效的方法来执行此操作)。
我是否错过了完成所有这些操作的更快方法?也许通过在 TEXTBEFORE 和 TEXTAFTER 上的“1st Thing”中执行搜索和替换,使用分别 TextA 和 TextB?
非常感谢。
编辑:是的,它们是文字字符串。是的,它们确实包含特殊字符,因为它们代表 URL.
的一部分有两种情况:1) 您想要替换 TEXTBEFORE
或 TEXTAFTER
,而不管它们是否存在,2) TEXTBEFORE
和 [=11] =]必须存在
场景一
您可以为此使用单个搜索和替换操作:
查找内容:^(TEXTBEFORE)|TEXTAFTER$
替换为:(?{1}TextA:TextB)
注意:如果 TEXTBEFORE
和 TEXTAFTER
包含特殊字符,您可以使用
查找内容:^(\QTEXTBEFORE\E)|\QTEXTAFTER\E$
详情:
^(TEXTBEFORE)
- 在行首匹配并捕获到第 1 组TEXTBEFORE
|
- 或TEXTAFTER$
- 匹配行尾的TEXTAFTER
。
替换模式:
(?{1}
- 如果第 1 组匹配,则TextA
- returnTextA
:
- 否则TextB
- 替换为TextB
)
- 条件替换模式结束。
场景 2
如果您需要匹配以某些文本开头并以另一个文本结尾的行,请使用
查找内容:^TEXTBEFORE(.*?)TEXTAFTER$
替换为:TextATextB
详情:
^
- 行首TEXTBEFORE
- 这里有一些文字(.*?)
- 第 1 组(可以用替换模式中的</code> 反向引用来引用)匹配除换行字符 </li> 以外的任何 0+ 个字符 <li><code>TEXTAFTER
- 一些文字...$
- 行尾。
尝试:
TEXTBEFORE(.+?)TEXTAFTER
替换为
TextATextB
参见 this 示例和解释
如果您需要查找整行:
^TEXTBEFORE(.+?)TEXTAFTER$
替换同上。