次の方法で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, @"\[[^[]+\]");
しかし、それはこのように正しく機能しません、私は空の配列または文字列を取得しています
何か助けていただければ幸いです!
使用 Regex.Matches
メソッドの代わりに:
string[] result =
Regex.Matches(str, @"\[.*?\]").Cast<Match>().Select(m => m.Value).ToArray();
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();
別のオプションは、分割にlookaroundアサーションを使用することです。
例えば.
string[] split = Regex.Split(str, @"(?<=\])(?=\[)");
このアプローチは、閉じ角括弧と開き角括弧の間の隙間を効果的に分割します。