У меня есть приложение C #, которое импортирует данные о клиентах, и я нахожу один случай использования сложным.Во-первых, вот несколько примеров строк:
Z20Q
M20A1070A20T
M20A1070D03D0480A20B
Мне нужно регулярное выражение ac # для извлечения либоиз следующих шаблонов, так часто, как они встречаются, где L
= буква и N
= номер:
LNNL
или LNNLNNNN
Вы можете рассчитывать на следующее:
- Шаблоны не могут перекрываться.Как только совпадение найдено, извлеките этот сегмент и посмотрите только на все оставшиеся строки, которые еще не сопоставлены.
- Каждый символ строки будет совпадать - ни один символ (символы) никогда не будет отброшен.
- Должен попытаться сопоставить
LNNLNNNN
, прежде чем пытаться сопоставить LNNL
.Если LNNLNNNN
совпадает, извлеките его и продолжайте пытаться сопоставить все, что осталось от строки. - Длина и расположение этих образцов являются точными, и на них можно рассчитывать.Но, как вы можете видеть из моего примера строк, длина строк может варьироваться.
- Каждая извлеченная / совпавшая строка должна быть ровно 4 символа или ровно 8 символов.
- Количество символов каждой строкибудет кратным 4: 4, 8, 12, 16, 20 (я не думаю, что их может быть больше 20)
- Строки будут состоять исключительно из буквенно-цифровых символов - без пробелов или специальных символов- только буквы и цифры
Итак, давайте пройдемся по нескольким:
Z20Q
- все готово - если это 4 символа, мне не нужно регулярное выражение,Я могу взять его и пойти.
M20A1070A20T
должен произвести и извлечь 2 строки: M20A1070
(соответствует шаблону LNNLNNNN
) и A20T
(соответствует шаблону LNNL
)
M20A1070D03D0480A20B
должен создать и извлечь 3 строки: M20A1070
(соответствует шаблону LNNLNNNN
) и D03D0480
(соответствует шаблону LNNLNNNN
) и A20B
(соответствует шаблону LNNL
)
Я изучал этот стековый пост , глядя на ^[G][0-9]{1,5}?$|^[G][0-9]{4}[A-Z]?$
- который выглядит как промисинНачну, но мое регулярное выражение кунг-фу слабое, и я был бы очень признателен за некоторые советы.