替换比赛而不越过其他一些比赛

时间:2012-11-08 20:18:29

标签: regex

现在我正在使用{{.+?}}(在Python中使用re,以及它的值)来匹配{{text}},但问题是有时会发生这种情况:{{ text {{text}} text }}。在正则表达式文献中,我已经看到了解决这个问题的方法,但我无法让它发挥作用。任何建议将非常感谢!

编辑:目标是让它选择所有,而不仅仅是中间部分。

3 个答案:

答案 0 :(得分:0)

我认为您需要使用负面字符类,如下所示:

\{\{[^\}\{]+\}\}

答案 1 :(得分:0)

您可以使用否定前瞻:{{(?:(?!{{).)+?}}

[编辑]

如果它们最多可以嵌套在一个级别,如{{ text {{text}} text }},则可以使用:

{{[^{}]*(?:{{[^{}]*}}[^{}]*)*}}

如果它们可能是任意级别的深层,那么你需要一个递归正则表达式,Python的模块不支持。但是,此处的正则表达式模块执行:http://pypi.python.org/pypi/regex

答案 2 :(得分:0)

您应该尝试使用正则表达式

\{{2}(?:[^{}]+|(?<!\})\}(?!\})|(?<!\{)\{(?!\{)|\{{2}\}{2})\}{2}