2016-11-24 4 views
2

У меня есть номера позиций в общем виде: 1-3 цифры, за которыми следует необязательный символ нижнего регистра, за которым следует дополнительная одиночная цифра, за которой следует слово, а затем необязательная одиночная цифра. Например, все следующие законные номера позиций: "21aRepair", "04iMod2", "04d1RR", "5", "07", "8a", "09b", "04g3"C# Регулярное выражение для захвата слова после захваченной группы

мне нужно разбить эти номера позиций на компоненты вида: Компонента 1) 1-3 цифр с последующих дополнительным строчным характером с последующими необязательными одного значный Компонент 2) слово Компонент 3) необязательно одна цифра

Например:

"21aRepair" должен стать "21a", "Repair", null

"04iMod2" должен стать "04i", "Mod", "2"

"04d1RR" должен стать "04d1", "RR", null

"5" должен стать "5", null, null

У меня есть следующие regex: (^\d{1,3}[a-z]?\d?), что хорошо работает для компонента 1. Я попробовал несколько вариантов компонента 2 без успеха.

Я думал следующее: (?<=^\d{1,3}[a-z]?\d?)([a-zA-Z]*\d?) будет работать. Добавление lookbehind "(?<=" к шаблону компонента 1 должно сказать «взять все, что есть после компонента 1», а группа ([a-zA-Z]*\d?) должна соответствовать компонентам 2 и 3. Это не дает ожидаемых результатов. Может кто-нибудь сказать мне, где я ошибаюсь?

+3

Первый символ слова посередине всегда в верхнем регистре? –

ответ

3

Вы можете рассмотреть возможность использования

^(\d{1,3}[a-z]?\d?)([a-zA-Z]*)(\d?)$ 

Смотрите regex demo

Детали:

  • ^ - начало строки
  • (\d{1,3}[a-z]?\d?) - Группа 1: компонент, от 1 до 3 цифры, необязательный строчный ASC II письмо и дополнительная цифра
  • ([a-zA-Z]*) - Группа 2: слово, ноль или более ASCII буквы
  • (\d?) - Группа 3: дополнительная цифра
  • $ - конец строки

В C#, использование

var m = Regex.Match(str, @"^(\d{1,3}[a-z]?\d?)([a-zA-Z]*)(\d?)$"); 

проверить, если m.Success является истинным, и получить доступ к трем Гроу ps с использованием m.Groups[n].Value, где n - это идентификатор группы.

+0

=) Идентично тому, что у меня было – bixarrio

+0

Могут быть вариации в зависимости от того, что может быть «словом». –

+0

Блестящий!Спасибо! –

Смежные вопросы