1

使用记事本++,我想在这样的字符串"; "中用分号( )替换所有出现的分号后跟空格( )";"

S#14_Budget.Y#2014; 2015; 2016.P{[Third Generation]}.w#Periodic.E{PRU.[Descendants]}; CNS.PRU.V#[None]; Total.A{Asset.[Base]}; {Liab.[Base]}; {NProfit.[Base]}; {Bal.[Base]}; {Stats.[Base]}; {BalSht.[Base]}; {NIncome.[Base]}.I{[ICP Top].[Base]}.C1#TotalC1.C2#TotalC2.C3#[None].C4#[None]</ns

该字符串可以在一个文件中出现数百次,我使用S#.*</ns.
字符串始终以 开头S#和结尾</ns
中间的所有位都可以变化,包括空格的数量。
只需将"; "需要更改为";".

4

1 回答 1

2

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)。

于 2013-09-18T22:51:10.243 回答