在Notepad ++正则表达式中删除子字符串的多个实例中的不同数量的空格

时间:2013-09-18 22:06:28

标签: regex notepad++

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

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结尾 中间的所有位都可以变化,包括空格的数量 只有"; "需要更改为";"

1 个答案:

答案 0 :(得分:2)

HamZa的帮助下,我提出了这个问题:

替换:

(S#.*?;) (?=.*?</ns)

使用:

\1

然后点击全部替换,直到不再进行替换(每个发现包含S#,因此您一次只能为这些字符串中的每一个替换一次),或者您可以编写一个简单的宏来查找和替换(全部?)并根据需要多次运行。

如果你的这个字符串在它自己的行上,你还应该包括行指示符的开始(^)和结束($):

^(S#.*?;) (?=.*?</ns$)

解释:source

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 ++支持可变长度的后视(至少在6.4.5中没有),你可以用(?<=S#14.*?); (?=.*?</ns)替换;(并且只做了一个全部替换)。