Я хочу использовать RegEx для удаления номеров версий из названий продуктов. Имена могут выглядеть так:
SampleProduct 2.0
Они также могут иметь круглые скобки вокруг номера версии:
SampleProduct (2.1)
Поэтому я попытался определить группу для номера версии и альтернативу для версии в скобках:
\s((?<versionNumber>\d+(\.\d+)*)|\(\k<versionNumber>\))\z
Но это не дает совпадений. Поскольку шаблон довольно маленький, я попытался получить доступ к группе с индексом:
\s((\d+(\.\d+)*)|\(\2\))\z
Это тоже не сработало. Кстати, в каком порядке индексируются вложенные группы? Упорядочены ли они по появлению их открытых или закрывающих скобок? В любом случае, ни один из \1
, \2
и \3
не дал совпадения.
Я пытался выяснить, неправильно ли я понял функцию Regex. Когда я экспериментирую с группами и альтернативами по отдельности, они работают как положено. Но когда я смешиваю эти две функции, в какой-то момент он перестает работать, и я не могу определить проблему.
В настоящее время я успешно использую выражение без группировки для удаления версии:
name = name.Substring(0, name.Length - Regex.Match(name, @"\s(\d+(\.\d+)*|\(\d+(\.\d+)*\))\z").Value.Length);
Но я бы хотел избежать дублирования шаблонов.