从一般正则表达式匹配中排除特定的正则表达式匹配

时间:2018-05-21 20:32:59

标签: c# regex

我一直在尝试各种组合,似乎无法获得C#.Net应用程序所需的正则表达式。

我有一个文本文档,其中包含以下内容:

{{{3456764345345}}} yadda yadda yadda {{{xyz}}} 

{{{3456764345345}}}可以包含任何字母数字值,每个文档会有所不同,而{{{xyz}}最初总是{{{xyz}}}。

所以,您可以拥有以下文件:

{{{3456764345345}}} yadda yadda yadda {{{xyz}}} 
{{{45435555}}} yadda yadda yadda {{{xyz}}} 
{{{54727r475t76777a4}}} yadda yadda yadda {{{xyz}}} 

我想用不同的值替换{{{3456764345345}}}和{{{xyz}}}。问题是,当我尝试替换{{{3456764345345}}}时,它会替换自己和{{{xyz}}},因此我无法替换第二个值。

我目前正在使用:

{{{.*?}}} 

作为我的表达。这可以找到第一个,但它也包括第二个。

我需要一个表达式,允许我找到第一个值,但不包括{{{xyz}}}值。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以首先替换{{{xyz}}}子字符串,然后转到其他三重支撑子字符串或:

str = Regex.Replace(str, @"{{{(?!xyz\b)\w+}}}", "O_o");
str = Regex.Replace(str, @"{{{xyz}}}", "o_O");

打破{{{(?!xyz\b)\w+}}}

  • {{{按字面意思匹配{{{
    • (?!xyz\b)下一个字符不应该是xyz
    • \w+匹配单词字符,至少一个
  • }}}按字面意思匹配}}}