Фигурные скобки ("{}") не делают то, что вы думаете, они делают, по крайней мере, в этом примере.
Вы, похоже, хотите, чтобы группа не соответствовала. С Python re
синтаксис для этого (?:\s*(\w+)\s*)
, чтобы соответствовать вашему примеру.
С этим изменением вашего примера я получаю:
>>> m = re.match(r"^\s*(\w+)\s*\|(?:\s*(\w+)\s*)*$", " network | level1 level2 leveln ")
>>> m
<_sre.SRE_Match object at 0x00F217B8>
>>> m.groups()
('network', 'leveln')
Обратите внимание, что результат содержит только последнее совпадение для повторной группы. Если вы хотите получить все совпадения, сопоставьте все выражение, содержащее повторения, а затем проанализируйте его, чтобы найти каждое совпадение. Например:
>>> m = re.match(r"^\s*(\w+)\s*\|((?:\s*\w+\s*)*)$", " network | level1 level2 leveln ")
>>> m.groups()
('network', ' level1 level2 leveln ')
>>> m.groups()[1].strip().split()
['level1', 'level2', 'leveln']
Кстати, это похоже на то, что было бы намного проще разобрать без регулярных выражений. Как видите, регулярные выражения содержат много ошибок и очень быстро запутываются.