38

クラスのSplit関数を使用して文字列を分割したいと思います。Regex問題は、区切り記号が削除され、それらを保持したいということです。できれば、splitee 内の個別の要素として。

私が見つけた他の議論によると、それを達成するには不便な方法しかありません。

助言がありますか?

4

5 に答える 5

88

パターンをキャプチャ グループに入れるだけで、一致も結果に含まれます。

string[] result = Regex.Split("123.456.789", @"(\.)");

結果:

{ "123", ".", "456", ".", "789" }

これは、他の多くの言語でも機能します。

  • JavaScript :"123.456.789".split(/(\.)/g)
  • パイソン:re.split(r"(\.)", "123.456.789")
  • パール:split(/(\.)/g, "123.456.789")

(Javaではありませんが)

于 2013-03-27T20:09:06.030 に答える
7

Matches文字列内の区切り記号を検索し、値と区切り記号を取得するために使用します。

例:

string input = "asdf,asdf;asdf.asdf,asdf,asdf";

var values = new List<string>();
int pos = 0;
foreach (Match m in Regex.Matches(input, "[,.;]")) {
  values.Add(input.Substring(pos, m.Index - pos));
  values.Add(m.Value);
  pos = m.Index + m.Length;
}
values.Add(input.Substring(pos));
于 2013-03-27T19:49:30.817 に答える
4

入力が「abc1defg2hi3jkl」で、正規表現が数字を選択するとします。

String input = "abc1defg2hi3jkl";
var parts = Regex.Matches(input, @"\d+|\D+")
            .Cast<Match>()
            .Select(m => m.Value)
            .ToList();

パーツは次のとおりです。abc 1 defg 2 hi 3 jkl

于 2013-03-27T19:56:32.473 に答える
0

それらを元に戻します:

    string[] Parts = "A,B,C,D,E".Split(',');
    string[] Parts2 = new string[Parts.Length * 2 - 1];
    for (int i = 0; i < Parts.Length; i++)
    {
        Parts2[i * 2] = Parts[i];
        if (i < Parts.Length - 1)
            Parts2[i * 2 + 1] = ",";
    }
于 2013-03-27T19:43:08.413 に答える