Regex 替换一根火柴而不交叉其他火柴

Regex 替换一根火柴而不交叉其他火柴,regex,Regex,现在我正在使用{.+?}}(在Python中使用re,这是值得的)来匹配{{text},但问题是有时会出现这种情况:{{text{{text}}}text}。在正则表达式的文献中,我看到了解决这个问题的方法,但我无法让它工作。如有任何建议,将不胜感激 编辑:目标是让它选择全部,而不仅仅是中间部分。我认为您需要使用一个负字符类,如下所示: \{\{[^\}\{]+\}\} 您可以使用负前瞻:{{(?:(?!{{.)+?}} [编辑] 如果它们最多可以嵌套一层,如{{text{{{text}}}}

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


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

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

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

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

[编辑]

如果它们最多可以嵌套一层,如
{{text{{{text}}}}
,则可以使用:

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

如果它们可以是任意深度的,那么您需要一个递归正则表达式,Python的re模块不支持它。但是,这里的正则表达式模块支持:

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

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

\{{2}(?:[^{}]+|(?大括号不需要转义吗?它们不会与正则表达式量词混淆吗?它作为量词是不正确的,所以它默认为文本。(我在发布之前测试过!)我不怀疑。只是好奇。这是一个好问题。一些正则表达式风格要求你无论如何都要避开大括号,不管它们是否构成有效的量词。或者至少是左大括号。关于大括号,OP确实说它是Python的。@Cenoc:我想重复
(?!{)。
。没有
(?:…)
,量词将仅适用于