Я пытаюсь построить регулярное выражение Python с необязательной группой захвата.Мое регулярное выражение работает для большинства случаев, но не может поместить соответствия в нужную группу в одном из тестовых случаев.
Я хочу сопоставить и захватить следующие случаи:
namespace :: tool_name :: 1.0.1
namespace :: tool_name
tool_name :: 1.0.1
tool_name
Вот регулярное выражение, которое у меня есть:
(?:(?P<namespace>^[^:]+)::)?(?P<name>[^:]*)(?:::(?P<version>[0-9\.]+))?
Это регулярное выражение отлично работает для всех моих 4 тестовых случаев, но проблемаУ меня есть в случае 3, tool_name захватывается в группе пространства имен, а 1.0.1 захватывается в группе имен.Я хотел бы, чтобы они были записаны в правильные группы, имя и версию соответственно
Спасибо