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

时间:2012-09-23 16:22:33

标签: c# regex

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

string text ="word foo<tag foo='a' />another word "

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

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>";
    }

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

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

由于

3 个答案:

答案 0 :(得分:5)

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

\bfoo\b(?![^<>]*>)

答案 1 :(得分:1)

这就是你想要的

(?<!\<[\w\s]*?)\bfoo\b(?![\w\s]*?>)

工作here

我已回答了相关问题here

答案 2 :(得分:0)

试试这个正则表达式:

Regex r = new Regex(@"\b" + rep + @".*?(?=\<)\b", RegexOptions.IgnoreCase);