替换一根火柴而不穿越其他一场比赛



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

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

我认为你需要使用一个负字符类,如下所示:

{{[^}{]+}}

你应该尝试使用正则表达式模式

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

您可以使用负面的前瞻:{{(?:(?!{{).)+?}}

[编辑]

如果它们最多可以嵌套在一级深度,如{{ text {{text}} text }},您可以使用:

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

如果它们可以是任意级别的深度,你需要一个递归正则表达式,而 Python 的 re 模块不支持。但是,这里的正则表达式模块确实: http://pypi.python.org/pypi/regex

最新更新