Струнный источник
" / JaME / ng2ih4cj3ekk8 / HAKI / g8o7o3 "
Как их сгруппировать:
JaME , нг , 2
JaME , IH , 4
JaME , CJ , 3
JaME , EKK , 8
HAKI , г, 8
HAKI , о, 7
HAKI , о, 3
И это мой код и результат:
Console.OutputEncoding = Encoding.UTF8;
MatchCollection mc;
string source = "/jame/n2i4c3e8/haki/g8o7o3";
string pattern = @"(/[A-Z_a-z]+/)|([A-Z_[ạảàáãăắẳằặẵâấẩầậẫóỏòọõôốổồộỗơớởờợỡéèẻẹẽêếềểệễúùủụũưứừửựữíìỉịĩýỳỷỵỹđ_ẠẢÀÁÃĂẮẲẰẶẴÂẤẨẦẬẪÓỎÒỌÕÔỐỔỒỘỖƠỚỞỜỢỠÉÈẺẸẼÊẾỀỂỆỄÚÙỦỤŨƯỨỪỬỰỮÍÌỈỊĨÝỲỶỴỸĐ_a-z]+_?[0-9_/._0-9]+)";
Regex myRegex = new Regex(pattern);
mc = myRegex.Matches(source);
foreach (Match m in mc)
{
Console.WriteLine(m.Value);
}
Console.ReadLine();
/ JaME /
NG2
ih4
CJ3
ekk8 /
HAKI /
g8
o7
а3
2 ответа
Это разбивает источник на группы из двух элементов («ключ» и значение) и разбивает значение на несколько подстрок, заканчивающихся цифрами.
var source = "/jame/ng2ih4cj3ekk8/haki/g8o7o3";
var results = source.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.Select ((value, index) => new {value, index})
.GroupBy(item => item.index / 2, item => item.value);
foreach (var result in results)
{
var items = Regex.Replace(result.Last(), @"\d", match =>
{
return "," + match.Value + Environment.NewLine;
});
foreach (var item in items.Split(Environment.NewLine.ToCharArray(),
StringSplitOptions.RemoveEmptyEntries))
Console.WriteLine(result.First() + "," + item);
}
Тем не менее, я думаю, что могу сделать лучше. Подержи мое пиво.
РЕДАКТИРОВАТЬ : эта версия использует аргумент MatchEvaluator
в вызове Regex.Replace для форматирования выходной строки:
var source = "/jame/ng2ih4cj3ekk8/haki/g8o7o3";
var result = Regex.Replace(source, @"/(?<group>.*?)/(?<value>[^/]+)", match =>
{
return Regex.Replace(match.Groups["value"].Value, @"(?<letter>\D+)(?<number>\d)",sub =>
{
return match.Groups["group" ].Value + "," + // "jame,"
sub .Groups["letter"].Value + "," + // "ng,"
sub .Groups["number"].Value + Environment.NewLine; // "2<CRLF>"
});
});
Console.WriteLine(result);
Вы можете использовать этот код:
string source = "/jame/n2i4c3e8/haki/ns2is5cs6eu7";
var splitted = Regex.Split(source, @"(?=\/[a-z]+\/)");
foreach (var word in splitted.Where(x => !string.IsNullOrEmpty(x)))
{
var cutted = word.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
var baseWord = cutted.First();
foreach(var end in Regex.Split(cutted.Last(), @"([a-z]+\d)").Where(x => !string.IsNullOrEmpty(x)))
Console.WriteLine($"/{baseWord}/{Regex.Match(end, @"[a-z]+")},{Regex.Match(end, @"\d+")} ");
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.