2

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

现在我正在使用这个

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

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

我只想将 > 替换为 text = " 每当我遇到<Run.

我该如何存档?

4

4 回答 4

2

捕获的替代方法是使用后视:

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

>现在,这将仅匹配<Run任意数量的非<字符之后(因此在同一标签内)之前的内容。

于 2012-10-19T21:07:06.807 回答
2

如果这是一个 XML 文档,那么您可以只使用 XPath 来选择Run元素并将属性添加到所选元素。这是比使用 Regex 更好的选择。

尝试这样的事情:

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

注意:我还没有测试过这个,但它应该给你一个好主意。

于 2012-10-19T21:08:01.317 回答
1

选项1)

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

选项 2)

Regex.Replace(XMLString, @"(?<=<Run.*?)>", " Text=\"", RegexOptions.IgnoreCase);
于 2012-10-19T21:12:11.693 回答
0

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

Regex.Replace(XMLString, @"<Run(.*?)>", "<Run$1 Text=\"", RegexOptions.IgnoreCase); 
于 2012-10-19T21:06:49.940 回答