Кажется, я не могу найти никакой информации об этом, поэтому я не уверен, возможно ли это или нет, но вот:
Есть ли способ иметь несколько вариантов имени соответствующей группы? Я получаю параметры из кода и использую имена групп регулярных выражений, чтобы использовать их впоследствии. Однако моя последовательность имеет несколько (очень похожих) форматов, и порядок параметров меняется. Следовательно, мой вопрос: может ли группа иметь другое имя, если другая группа не совпадает?
Пример: (?'type'A|B|C)-(?'length_or_diameter'\d+)(?:x(?'length'\d+))?
Форматы кода: (type)-(length)
ИЛИ (type)-(diameter)x(length)
У меня есть способы обойти это в коде, но я думаю, что было бы намного элегантнее, если бы это можно было решить в самом регулярном выражении. Поэтому вот мой вопрос: есть ли способ назвать группу 2 (length_or_diameter) либо «длиной», если группа 3 не имеет совпадения, либо «диаметром», если у группы 3 есть совпадение, вместо того, чтобы называться length_or_diameter и требовать больше логика в коде?
A-5
иB-6x3
? Какая у вас библиотека регулярных выражений? Попробуйте(?'type'A|B|C)-(?:(?'diameter'\d+)(?=x\d))?(?:x?(?'length'\d+))?
- person Wiktor Stribiżew   schedule 27.02.2019