2017-01-01 3 views
0

フォーマットが不適切なログを解析してクリーンアップしようとしています。ですから、基本的には複数のスペースを1つのスペースに置き換えたいと思っています。しかし、余分なスペースが無駄ではない引用符内に出現するものがあり、それらを置き換えることは望ましくありません。私は複数のスペースを1つに置き換えることについて話しているリソースがたくさんあることを知っていますが、否定を得ることは引用符の中に入れないと私に悲しみを与えています。 RegExロジックがなぜ私の頭をそっくりそのまま乱しているのか、本当に時々不思議です。複数のスペースを1つに置き換えます。引用符で囲まれていない場合

EDIT:例

Jrn.Size  0 , 3317 , 1549 

Jrn.Directive "GlobalToProj" , "[File Name.rvt]" 
なる

Jrn.Size 0 , 3317 , 1549 

Jrn.Directive "GlobalToProj" , "[File Name.rvt]" 

なります0

"GlobalToProj"以降の余分なスペースは置き換えられますが、余分なスペースは"[File Name.rvt]"にはありません。

+2

は、入力テキストと予想されるoutpuを表示します迅速なヘルプを得るには – RomanPerekhrest

+1

そして使用している言語/フレームワーク/プラットフォームに質問にタグを付けてください。 –

+0

両方のコメントのために改訂されました。 – Gordon

答えて

1

あなたは試合は、我々は、テキストの引用符で囲まれた部分の内側または外にいるかどうかを判断するために、引用符の偶数か奇数で従っているかどうかをテストするthis ingenious approachを使用することができます。

PS C:\> 'Jrn.Directive "GlobalToProj" , "[File Name.rvt]"' -replace '\s+(?=([^"]*"[^"]*")*[^"]*$)',' ' 
Jrn.Directive "GlobalToProj" , "[File Name.rvt]" 

パターンそのもの:まで

\s+(?=([^"]*"[^"]*")*[^"]*$) 

休憩:

\s+   # one or more spaces followed by 
(?=   # positive lookahead group containing 
    (  # capture group containing 
    [^"]* # 0 or more non-doublequote characters 
    "  # 1 doublequote mark 
    [^"]* # 0 or more non-doublequote characters 
    "  # 1 doublequote mark 
)*  # group repeated 0 or more times 
    [^"]*  # 0 or more non-doublequote characters 
    $   # end of string 
)   
+0

ああ、それはちょうど悪いです!私は新しいレッスンをしていますが、RegExに関しては、この内訳が最終的に私の理解ブロックを超えてしまうかもしれません。 – Gordon

関連する問題