C#Regex仅在字符串外部替换标签

dav*_*vid 2 c# regex

我有一个字符串,代表xml的一部分.

string text ="word foo<tag foo='a' />another word "
Run Code Online (Sandbox Code Playgroud)

我需要替换此字符串中的特定单词.所以我使用了这段代码:

Regex regex = new Regex("\\b" + co + "\\b", RegexOptions.IgnoreCase);
return regex.Replace(text, new MatchEvaluator(subZvyrazniStr));
static string     subZvyrazniStr(Match m)
    {
        return "<FtxFraze>" + m.ToString() + "</FtxFraze>";
    }
Run Code Online (Sandbox Code Playgroud)

但我的代码的问题是,它还替换了我不想要的字符串内部标签.那么我应该添加什么来替换标签之外的单词呢?

例如:当我将变量co设置为"foo"时,我想返回 "word <FtxFraze>foo</FtxFraze><tag foo='a' />another word"

谢谢

Qta*_*tax 5

在某些情况下,如果你不那么挑剔,这样的简单伎俩就足够了:

\bfoo\b(?![^<>]*>)
Run Code Online (Sandbox Code Playgroud)

  • @david,`(?![^ <>]*>)`是一个负向前瞻,如果单词后跟一个`>`,它之间没有一个`<`,它就会失败,因此暗示这个单词在里面一个开放的标签. (2认同)