Регулярное выражение для разделения буквенно-цифровой строки на 3 секции?

#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})?");