我想用Regex替换文本

时间:2012-10-19 21:02:18

标签: c# regex

在我的代码中,我正在尝试替换<Run Foreground="#FFFF0000"> with <Run Foreground="#FFFF0000" Text="

现在我正在使用这个

Regex.Replace(XMLString, @"<Run.*?>", "<Run Text=\"", RegexOptions.IgnoreCase); 

<Run Foreground="#FFFF0000">替换为<Run Text="

我只想替换&gt; with text =“每当遇到<Run时。

我如何存档?

4 个答案:

答案 0 :(得分:2)

捕获的另一种方法是使用lookbehind:

Regex.Replace(XMLString, @"(?<=<Run[^<]*)>", " Text=\"", RegexOptions.IgnoreCase);

现在,只会在>之前与<Run之后的<匹配任意数量的非{{1}}字符(因此在同一标记内)。

答案 1 :(得分:2)

如果这是一个XML文档,那么您可以使用XPath选择Run元素并向所选元素添加属性。这比使用正则表达式更好。

尝试这样的事情:

string txtAttributeName = "Text";
foreach(XmlNode element in xmlDocument.SelectNodes(".//Run")
{
    if (element.Attributes.GetNamedItem(txtAttributeName) == null)
    {
        XmlAttribute txtAttribute = xmlDocument.CreateAttribute(txtAttributeName);
        txtAttribute.Value = "Whatever you want to place here";

        element.Attributes.Append(txtAttribute);
    }
}

注意:我没有对此进行过测试,但它应该会给你一个好主意。

答案 2 :(得分:1)

选项1)

Regex.Replace(XMLString, @"(<Run.*?)>", "$1 Text=\"", RegexOptions.IgnoreCase);

选项2)

Regex.Replace(XMLString, @"(?<=<Run.*?)>", " Text=\"", RegexOptions.IgnoreCase);

答案 3 :(得分:0)

您需要捕获要保留的文本,然后重新添加。我没有测试过,但是:

Regex.Replace(XMLString, @"<Run(.*?)>", "<Run$1 Text=\"", RegexOptions.IgnoreCase);