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