繁体   English   中英

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

[英]Excluding specific regex match from general regex match

我一直在尝试各种组合,但似乎无法获得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}}}值。

提前致谢。

您可以先替换{{{xyz}}}子字符串,然后再选择其他三括号子字符串,或者:

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

{{{(?!xyz\\b)\\w+}}}分解为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM