11

次の方法で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, @"\[[^[]+\]");

しかし、この方法では正しく動作しません。空の配列または文字列を取得しているだけです

どんな助けでも大歓迎です!

4

4 に答える 4

22

Regex.Matches代わりに次のメソッドを使用してください。

string[] result =
  Regex.Matches(str, @"\[.*?\]").Cast<Match>().Select(m => m.Value).ToArray();
于 2013-03-14T22:50:59.650 に答える
16

この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();
于 2013-03-14T22:49:37.683 に答える
2

別のオプションは、分割にルックアラウンド アサーションを使用することです。

例えば

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

このアプローチは、右角かっこと左角かっこの間の空白で効果的に分割されます。

于 2013-03-15T00:07:15.313 に答える
-1

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

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

この方法では結果がばらばら[になり]ますが、必要に応じて元に戻すのは難しくありません。

于 2013-03-14T22:54:37.040 に答える