Извлечение скобок с регулярным выражением из строки в python - PullRequest
0 голосов
/ 17 декабря 2011

Как я могу извлечь {{template | {{template2}} | другие параметры}} из этой строки, если мы просто знаем "template":

{{template0}}
{{template|{{template2}}|other params}}
{{template3}}

1 Ответ

2 голосов
/ 17 декабря 2011

Это должно делать то, что вы хотите:

>>> 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]|.)*}}$'

Теперь он будет корректно обрабатывать несколько новых строк, и я добавил }} в конце, если ваше совпадение является последней группой в скобках перед строками с другими форматами.

...