2013-03-14 23 views
7

私はC#で次のように文字列を分割しようとしています:分割C#で文字列

着信文字列は、フォーム

string str = "[message details in here][another message here]/n/n[anothermessage here]" 

であると私は、文字列の配列に分割しようとしていますフォーム

string[0] = "[message details in here]" 
string[1] = "[another message here]" 
string[2] = "[anothermessage here]" 

に私はそのようなこの

string[] split = Regex.Split(str, @"\[[^[]+\]"); 
ような方法でそれをやろうとしました。

しかし、それは正しくこのように動作しません、私は任意の助けをいただければ幸い空の配列や文字列

を取得しています!

+7

「これは正しく動作しません」 - 具体的にしてください。それはどういう意味ですか?それは例外をスローしますか?期待される結果が得られないのでしょうか?もしそうなら、それは何を生み出すのですか?それを投稿できますか?あなたの質問を正しく質問してください。そうしないと、ここでdownvotesとclose投票がすぐに行われます。 –

+0

文字列クラスのSplit()メソッドオーバーロードの1つを使用します。 –

+0

すべての改行を空の文字列に置き換え、 "[["。 –

答えて

15

ではなくRegex.Matchesメソッドを使用します。

string[] result = 
    Regex.Matches(str, @"\[.*?\]").Cast<Match>().Select(m => m.Value).ToArray(); 
8

Splitメソッドは、サブストリングの間に指定したパターンのインスタンスを返します。例:

var items = Regex.Split("this is a test", @"\s"); 

結果は配列[ "this", "is", "a", "test" ]です。

解決策は代わりにMatchesを使用することです。

var matches = Regex.Matches(str, @"\[[^[]+\]"); 

あなたは、簡単にマッチした値の配列を取得するためのLINQを使用することができます。

var split = matches.Cast<Match>() 
        .Select(m => m.Value) 
        .ToArray(); 
+0

'Split'の例をテストしましたか? '\ w'を適切にエスケープしないことを除けば、あなたが言及した結果は完全に間違っています。 @KennethKありがとう。 –

+0

私はドアの外に私の編集を書いた、それを校正する機会がなかった。それを私が直した。 –

-1

の代わりに使用することができ、正規表現を使用してSplitこのような文字列のメソッド

Split(new[] { '\n', '[', ']' }, StringSplitOptions.RemoveEmptyEntries) 

この方法では結果の周囲に[]がなくなりますが、必要に応じて追加するのは難しくありません。

+0

これは、 '['と ']'の間で '\ n 'にも壊れます。私はそれがOPが望んでいるとは思わない –

0

もう1つの方法は、分割にルックアラージャーアサーションを使用することです。

string[] split = Regex.Split(str, @"(?<=\])(?=\[)"); 

このアプローチは、効果的に、閉じた角かっこの間の空白を分割します。