在HamZa的帮助下,我想出了这个:
代替:
(S#.*?;) (?=.*?</ns)
和:
\1
然后点击Replace All直到不再进行替换(每个查找都包括S#
,因此您一次只能对这些字符串中的每一个进行一次替换),或者您可以编写一个简单的宏来查找和替换(全部?)并运行根据需要多次。
如果你的这个字符串在它自己的行上,你还应该包括行指示符的start ( ^
) 和 end ( ):$
^(S#.*?;) (?=.*?</ns$)
解释:(来源)
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
S# 'S#'
--------------------------------------------------------------------------------
.*? any character except \n (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
; ';'
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
' '
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
.*? any character except \n (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
</ns '</ns'
--------------------------------------------------------------------------------
) end of look-ahead
如果 Notepad++ 支持可变长度的look-behinds(至少在 6.4.5 中不支持),您可以替换(?<=S#14.*?); (?=.*?</ns)
为;
(并且只做了一个Replace All)。