Split
クラスのRegex
関数を使用して文字列を分割したいと思います。問題は、区切り文字が削除されることであり、区切り文字を保持したいのです。好ましくは、スプリティーの個別の要素として。
私が見つけた 他の議論 によると、それを達成するための不便な方法しかありません。
助言がありますか?
パターンをキャプチャグループに入れるだけで、一致も結果に含まれます。
_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] = ",";
}