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

文字列は 1 つのファイルに何百回も出現する可能性があり、S#.*</ns.
文字列は常に で始まりS#、常に で終わり</nsます。
中間のすべてのビットは、スペースの数を含めて異なる場合があります。
のみ"; "に変更する必要があります";"

4

1 に答える 1

2

HamZaの助けを借りて、私はこれを思いつきました:

交換:

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

と:

\1

Replace All次に、置換が行われなくなるまでヒットします (各検索には が含まれるS#ため、一度にこれらの文字列のそれぞれに対して 1 つの置換しか実行できません)。または、単純なマクロを作成して、検索して置換 (すべて?) し、実行することができます。必要な回数だけ。

この文字列が独自の行にある場合は、行の開始 ( ^) と終了 ( $) インジケータも含める必要があります。

^(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);(そして 1 つ実行しただけReplace Allです)。

于 2013-09-18T22:51:10.243 に答える