2017-01-09 6 views
1

私はどこにでも見ていますが、答えを見つけることができません。私は文字列内のすべてのスペースを削除する正規表現が必要ですが、内部にあるものだけを保持します""。 例:$F:2 $PX:30 $PY:980 $T: " "または$F:A $PX:30B $PY:9K80 $T: " "ので、最後にそれはあなたが答える正規表現の読み方を説明することは価値がある$F:2$PX:30$PY:980$T:" "ホワイトスペースを除外する正規表現 ""内にある場合を除いて

のようになります。

(?<!")\s+(?!") 

注:ドミトリーで指摘したようにこれは、複数のスペースでは動作しない可能性がありますすべての空白をマッチング

(?<!") (?!") 

:引用符が付け加えも続かないスペースをマッチング

+0

正直なところ、正規表現を使用するのではなく、文字の繰り返しと二重引用符の開閉を追跡するだけで解決するのは非常に難しい問題ではありません。 – juharr

+0

サンプルケースはほとんどありません。例えば、 "a b c" '... [このデモを見る](https://regex101.com/r/XtILna/1)のように空白以外のものがあるかもしれません。また、あなたがすでに理解していることを示してください。 –

答えて

1

これは、"に触れている空白と一致しますが、それらによって囲まれていません。

" +(?!\")|(?<!\") +" 

そして、すべての空白のために:

"\s+(?!\")|(?<!\")\s+" 

あなたはRegex101またはRextester

+0

少し更新してください。 $ F:2 $ PX:30 $ PY:980 $ T: "" $ F:2 $ PX:30 $ PY:980 $ T: ""この場合、正規表現は閉じた後にスペースを捕捉しませんあなたはそれをつかまえることができますか?それはエラーではありません、文字列はそうです。2のように1 –

+0

ok。問題はこうです:最初のコメントで、最初の '$ T : ""それは残りの部分を無視して、それは私に文字列の半分だけを与えるので、あなたもそれを得るための回避策を見つけることができます@ maksymiuk –

+0

私は理解していません..ここでは、あなたが欲しかった:https://regex101.com/r/4ggez2/1 – maksymiuk

1

+0

これは3つ以上の連続した引用符で囲まれたスペースでは失敗します。 '' ''。 –

+0

引用符で囲まれたスペースを無視して引用符で囲まれたスペースを削除するだけで少し変更することができます。これは '$ T: ''ではなく' $ T: 'である必要があります。 "。私が言うことを理解しようとしていることを願っています –

+0

@arianitax、私の答えはその問題を解決し、また複数のスペースが可能です – maksymiuk

1

The Greatest Regex Trick Ever上でそれをテストすることができ、そのような場合に非常に便利です:

var str = "$F:2 $PX:30 $PY:980 \" \"$T:\" \""; 
str = Regex.Replace(str, "\"\\s+\"|\\s+", m => { return m.Value.StartsWith("\"") ? m.Value : ""; }); 
Console.WriteLine(str); 

デモ:https://dotnetfiddle.net/Q54FlJ

関連する問題