#regex
#регулярное выражение
Вопрос:
Я пытаюсь написать регулярное выражение, достаточно гибкое, чтобы соответствовать одной, двум или трем группам захвата. К сожалению, я могу сопоставить только две или три группы захвата. На изображении ниже элемент, выделенный желтым, остается непревзойденным. Я бы ожидал, что оно будет соответствовать AB. Мои примеры данных и регулярных выражений находятся здесь: примеры данных и регулярных выражений
На словах я пытаюсь сопоставить 1, 2 или 3 группы захвата альфа-символов, которые окружены 1 или 0.
Комментарии:
1.Вот так?
[01]([A-Z] )(?=[01]|$)(?:.*?[01]([A-Z] )(?=[01]|$)(?:.*?[01]([A-Z] )(?=[01]|$))?)?
regex101.com/r/Ujt75H/1
Ответ №1:
Использование d
может соответствовать только 0 или 1, а использование d?
означает необязательную цифру.
Поскольку слева всегда есть цифра, а справа может быть либо 0, либо 1, либо конец строки, вы можете указать правильную часть вместо того, чтобы сопоставлять ее.
Шаблон соответствует:
[01]([A-Z] )(?=[01]|$)(?:.*?[01]([A-Z] )(?=[01]|$)(?:.*?[01]([A-Z] )(?=[01]|$))?)?
[01]
Соответствует либо 0, либо 1([A-Z] )(?=[01]|$)
Захватите группу 1, сопоставьте 1 символы от А доЯ и укажите либо0
или1
, либо конец строки справа.(?:
Не группа захвата.*?[01]([A-Z] )(?=[01]|$)
Сопоставьте как можно меньшее количество символов до следующего следующего вхождения для группы 2(?:
Не группа захвата.*?[01]([A-Z] )(?=[01]|$)
Сопоставьте как можно меньшее количество символов до следующего следующего вхождения для группы 3
)?
Закройте group и сделайте ее необязательной
)?
Закройте group и сделайте ее необязательной