Давайте уточним следующие предположения:
- В строке есть три раздела.
- раздел 1 всегда начинается с прописных или строчных букв RR и заканчивается одной или несколькими десятичными цифрами.
- раздел 2 всегда начинается с заглавных или строчных букв S и заканчивается одной или несколькими десятичными цифрами.
- раздел 3 всегда начинается с буквы C сверху или снизу и заканчивается одной или несколькими десятичными цифрами.
Для простоты достаточно следующего.
[Rr][Rr][0-9]+[ ]+[Ss][0-9]+[ ]+[Cc][0-9]+
- [Rr] означает ровно один алфавит R,
верхний или нижний регистр.
- [0-9] означает ровно один десятичный знак
цифра.
- [0-9] + означает, по крайней мере, один или более,
десятичные цифры.
- [] + означает, по крайней мере, один или более,
пространства.
Однако, чтобы быть полезным, обычно, когда вы используете регулярное выражение, мы также определяем отдельные разделы, чтобы использовать возможность сопоставления, чтобы помочь нам присвоить отдельные значения разделов их соответствующим / отдельным переменным.
Поэтому следующее регулярное выражение более полезно.
([Rr][Rr][0-9]+)[ ]+([Ss][0-9]+)[ ]+([Cc][0-9]+)
Давайте применим это регулярное выражение к строке
string inputstr = "Holy Cow RR12 S53 C21";
Это то, что ваш сопоставитель регулярных выражений даст вам знать:
start pos=9, end pos=21
Group(0) = Rr12 S53 C21
Group(1) = Rr12
Group(2) = S53
Group(3) = C21
Есть три пары эллиптических / круглых скобок.
Каждая пара - это часть строки, которую компилятор регулярных выражений называет группой.
Компилятор regex будет вызывать совпадение
- вся подобранная строка как группа 0
- сельский маршрут как группа 1
- сайт как группа 2 и
- отделение как группа 3.
Естественно, группы 1, 2 и 3 будут встречать совпадения, если и только если группа 0 имеет совпадение.
Следовательно, ваш алгоритм будет использовать это со следующим псевдокодом
string postalstr, rroute, site, compart;
if (match.group(0)!=null)
{
int start = match.start(0);
int end = match.end(0);
postalstr = inputstr.substring(start, end);
start = match.start(1);
end = match.end(1);
rroute = inputstr.substring(start, end);
start = match.start(2);
end = match.end(2);
site = inputstr.substring(start, end);
start = match.start(3);
end = match.end(3);
compart = inputstr.substring(start, end);
}
Кроме того, вы можете захотеть войти в таблицу базы данных со столбцами: rr, site ,арти, но вы хотите, чтобы вводились только цифры без алфавитов "rr", "s" или "c".
Это будет регулярное выражение с вложенной группировкой для использования.
([Rr][Rr]([0-9]+))[ ]+([Ss]([0-9]+))[ ]+([Cc]([0-9]+))
И средство сопоставления сообщит вам следующее при совпадении для группы 0:
start=9, end=21
Group(0) = Rr12 S53 C21
Group(1) = Rr12
Group(2) = 12
Group(3) = S53
Group(4) = 53
Group(5) = C21
Group(6) = 21