如果我们只知道“模板”,我如何从这个字符串中提取 {{template|{{template2}}|other params}}:
{{template0}}
{{template|{{template2}}|other params}}
{{template3}}
这应该做你想要的:
>>> match = re.search(r'^{{template\b.*$', your_string, re.M)
>>> match.group()
'{{template|{{template2}}|other params}}'
它在 'template' 之后使用单词边界 ( \b
),因此它不会匹配 'template0' 或 'template3'。使用该re.M
选项^
并将$
匹配行的开头和结尾,而不是字符串的开头和结尾。
编辑:从您的评论中尝试以下正则表达式换行符:
r'^{{template\b(?:[^}]\n+|\n+[^{]|.)*$'
无论您将换行符放在|
.
编辑 2:对于正则表达式问题,您可以预先指定输入的外观,这一点非常重要。这是另一个适用于您最新评论中的文本的版本:
r'^{{template\b(?:[^}\n]\n+|\n+[^{\n]|.)*}}$'
现在它将正确处理多个换行符,并且我}}
在最后添加了,以防您的匹配是其他格式的行之前的最后一个括号组。