web-dev-qa-db-ja.com

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, @"\[[^[]+\]");

しかし、それはこのように正しく機能しません、私は空の配列または文字列を取得しています

何か助けていただければ幸いです!

11
user1875195

使用 Regex.Matchesメソッドの代わりに:

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

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

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();
15
p.s.w.g

別のオプションは、分割にlookaroundアサーションを使用することです。

例えば.

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

このアプローチは、閉じ角括弧と開き角括弧の間の隙間を効果的に分割します。

2
Kenneth K.