0

如果我们只知道“模板”,我如何从这个字符串中提取 {{template|{{template2}}|other params}}:

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

1 回答 1

2

这应该做你想要的:

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

现在它将正确处理多个换行符,并且我}}在最后添加了,以防您的匹配是其他格式的行之前的最后一个括号组。

于 2011-12-16T20:32:03.733 回答