2016-04-13 8 views
0

私は文字列を持っています。これはcsvの行です。この文字列は、私が使用しています一つは、この正規表現の分割が期待どおりに動作しない

{X = 4535.12、Y = 4535.12} {X = 12345、Y = 12345}などのように構成されているの多くの値、...

が含まれていますとき、私の正規表現は、この文字列を分割するが、大量のデータで、このパターン

/(({X=\d+\.\d+, Y=\d+\.\d+})|({X=\d+, Y=\d+})|({X=\d+\.\d+, Y=\d+})|({X=\d+, Y=\d+\.\d+}))+/g 

私はウェブサイト上でこれをテストし、それは私が望んでいた正確な文字列に一致していない他の人を使用することにより、これまで成功していないが、それを使って分割すると、1つの値しか得られません(文字列全体が1つ)

Splitの機能がありますか?標準マッチングとは異なる動作をする原因がありませんか、パターンが間違っていますか?

は、C#の行は、あなたがそれを簡略化することができ、あなたの正規表現は非常に複雑なので、

string[] tempLine = System.Text.RegularExpressions.Regex.Split(line, @"/(({X=\d+\.\d+, Y=\d+\.\d+})|({X=\d+, Y=\d+})|({X=\d+\.\d+, Y=\d+})|({X=\d+, Y=\d+\.\d+}))+/g"); 
+0

各x、yの座標を分割したいですか? –

+0

分割を実行しているC#のコード行は何ですか?それはいくつかのファンキーな構文を持つかもしれません – Isaac

+0

@BadroNiaimi私は全体の行から残りの部分を分割したい、それは削除する必要がありますコンマが含まれています。 –

答えて

2

ファーストのような読み:

({X=\d+(?:\.\d+)?, Y=\d+(?:\.\d+)?}) 

そして、ここで結果のC#コードです:

string s = "{X=4535.12, Y=4535.12}{X=12345, Y=12345}"; 
string regex = @"({X=\d+(?:\.\d+)?, Y=\d+(?:\.\d+)?})"; 

var matches = Regex.Matches(s, regex); 
foreach (Match match in matches) 
{ 
    Console.Out.WriteLine(match.Value); 
    // Or whatever you want to do with any couple {X=something, Y=something} 
} 
+1

'@" {X = [\ d。] +、\ s + Y = [\ d。] +} "'正規表現を使用します。一致する浮動小数点値の妥当性はここでは問題ではありません。 –

+1

これは私が欲しいものではありません。申し訳ありませんが、私が十分に指定しなかった場合は、データのセット全体を分離したいので、データが同じ場合は ** hello {X = 4535.12、Y = 4535.12 {0 = "hello" [1] = "{X = 4535.12、Y = 4535.12} {X = 12345、Y} {X = 12345、Y = 12345} = 12345} "[2] ="さようなら " –

+1

私はこのパターンを少し変えることでこれを動作させることができて助けてくれてありがとう、最後に' + 'を追加して、それはすべて返されました。私は内部のグループを非キャプチャにしてデータを一度だけ取得するようにしました。私はこの '({:{X = \ d +(?:\。\ d +)?, Y = \ d + \ d +)?})+) ' –

0

try

^(\s*\{\s*X\s*=\s*(\d*(\.\d*)?)\s*,\s*Y\s*=\s*(\d*(\.\d*)?)\s*\}\s*)*$ 
+0

そこには空白があまりなく、それらの場所の90%で不必要で、おそらく^({X =(\ d +(\。\ d +)?)、\ $ * - これは指定されたデータよりもはるかに多く一致します –

+0

形式は.5または12の数字はどうなりますか? – Ali

1

私はこれが@Thomasが与えた答えの少し編集されたバージョンであり、それは見つけることで私を助けているためのような、私は答えとして彼をマークします

((?:{X=\d+(?:\.\d+)?, Y=\d+(?:\.\d+)?})+) 

この正規表現文字列を使用することによって、この問題を解決ソリューションと彼の答えは、より一般的であり、この問題で他の人を助ける可能性が高い

関連する問題