Вы можете использовать группы захвата (...)
для всех необходимых вам фигур:
Regex regex = new Regex(@"^(ABC)\+(\d{1})([A-Z0-9])?(\:\d{1})?\+([A-Z0-9]{1,12})\:([A-Z0-9]{9})\+([A-Z0-9]{0,45})\:([A-Z0-9]{0,45})\:(\d{8})\+(\d{1})(\d{4})?(\d{1})?([A-Z0-9]{1,7})?([A-Z0-9]{3})?([A-Z0-9]{15})?\'$");
string row = @"ABC+1+E522017332:101111757+MAX:MUSTERMANN:16890224+9'";
var match = regex.Match(row);
if (match.Success)
{
for (int i = 1; i < match.Groups.Count; i++)
{
string value = match.Groups[i].Value;
if (value == string.Empty)
{
value = "(null)";
}
Console.WriteLine(value);
}
}
Теперь Groups
пронумерованы 1 ... много.Но это совершенно нечитаемо ... Вы могли бы дать явные имена:
Regex regex = new Regex(@"^(?<abc>ABC)\+(?<digit0>\d{1})(?<lettersdigits0>[A-Z0-9])?(\:\d{1})?\+([A-Z0-9]{1,12})\:([A-Z0-9]{9})\+([A-Z0-9]{0,45})\:([A-Z0-9]{0,45})\:(\d{8})\+(\d{1})(\d{4})?(\d{1})?([A-Z0-9]{1,7})?([A-Z0-9]{3})?([A-Z0-9]{15})?\'$");
string row = @"ABC+1+E522017332:101111757+MAX:MUSTERMANN:16890224+9'";
var match = regex.Match(row);
if (match.Success)
{
{
string value = match.Groups["abc"].Value;
if (value == string.Empty)
{
value = "(null)";
}
Console.WriteLine(value);
}
{
string value = match.Groups["digit0"].Value;
if (value == string.Empty)
{
value = "(null)";
}
Console.WriteLine(value);
}
}
Возможно имена лучше, чем abc
, digit0
, letterdigit0
:-) Имена, которые объясняют, что такое цифра / буква!