使用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
结尾
中间的所有位都可以变化,包括空格的数量
只有"; "
需要更改为";"
。
答案 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)
替换;
(并且只做了一个全部替换)。