クラスのSplit
関数を使用して文字列を分割したいと思います。Regex
問題は、区切り記号が削除され、それらを保持したいということです。できれば、splitee 内の個別の要素として。
私が見つけた他の議論によると、それを達成するには不便な方法しかありません。
助言がありますか?
パターンをキャプチャ グループに入れるだけで、一致も結果に含まれます。
string[] result = Regex.Split("123.456.789", @"(\.)");
結果:
{ "123", ".", "456", ".", "789" }
これは、他の多くの言語でも機能します。
"123.456.789".split(/(\.)/g)
re.split(r"(\.)", "123.456.789")
split(/(\.)/g, "123.456.789")
(Javaではありませんが)
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));
入力が「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
それらを元に戻します:
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] = ",";
}