#c# #regex
#c# #регулярное выражение
Вопрос:
У меня есть много разных форматов входных строк, и мне нужно разделить входную строку на 3 секции. Несколько примеров ниже (хотя есть несколько возможностей):
1A1 = 1, A, 1
123AA44 = 123, AA, 44
AA44 = пусто, AA, 44
44AA = 44, AA, пусто
Дополнительные ограничения для этих разделов:
- 1-й раздел является только числовым и имеет длину 1-4 символа
- 2-я секция состоит только из букв и имеет длину 1-3 символа
- 3-й раздел может быть числовым или буквенно-цифровым и иметь длину 1-4 символа
Я достиг предела своих знаний о регулярных выражениях с помощью приведенного ниже кода. Это работает для любого сценария, за исключением случаев, когда одна из 3 секций остается пустой во входных данных. Нужна помощь! Спасибо.
Regex regex = new Regex("(?<Section1>[0-9]{1,4})(?<Section2>[a-zA-Z]{1,3})(?<Section3>[0-9a-zA-Z]{1,4})");
Match match = regex.Match(inputString);
string 1 = match.Groups["Section1"].Value;
string 2 = match.Groups["Section2"].Value;
string 3 = match.Groups["Section3"].Value;
Комментарии:
1. как вы отличаете 2-й раздел от 3-го? Всегда ли 3-й раздел начинается с буквы?
2. 2-й раздел всегда заканчивается буквой, а 3-й раздел всегда начинается с цифры
Ответ №1:
Вы пробовали это?
Regex regex = new Regex("(?<Section1>[0-9]{0,4})(?<Section2>[a-zA-Z]{0,3})(?<Section3>[0-9a-zA-Z]{1,4})");
Комментарии:
1. Да, это действительно имеет больше смысла! Вы просто пропустили ноль в последнем разделе.
Ответ №2:
Должно быть достаточно добавить необязательный элемент в каждый раздел.
И я добавил правило в 3-й раздел, чтобы оно начиналось с числа
Regex regex = new Regex("(?<Section1>[0-9]{1,4})?(?<Section2>[a-zA-Z]{1,3})?(?<Section3>[0-9][0-9a-zA-Z]{0,3})?");