Это должно делать то, что вы хотите:
>>> match = re.search(r'^{{template\b.*$', your_string, re.M)
>>> match.group()
'{{template|{{template2}}|other params}}'
Он использует границу слова (\b
) после 'template', поэтому он не будет совпадать с 'template0' или 'template3'. Опция re.M
используется, так что ^
и $
будут соответствовать началу и концу строк вместо начала и конца строки.
Редактировать: Попробуйте следующее регулярное выражение для случая новой строки из вашего комментария:
r'^{{template\b(?:[^}]\n+|\n+[^{]|.)*$'
Это должно работать независимо от того, ставите ли вы новую строку до или после |
.
Редактировать 2: Это очень важно с вопросами регулярных выражений, которые вы указываете, как ввод может выглядеть впереди. Вот еще одна версия, которая работает с текстом из вашего последнего комментария:
r'^{{template\b(?:[^}\n]\n+|\n+[^{\n]|.)*}}$'
Теперь он будет корректно обрабатывать несколько новых строк, и я добавил }}
в конце, если ваше совпадение является последней группой в скобках перед строками с другими форматами.