在我的代码中,我正在尝试替换<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
时。
我如何存档?
答案 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)
Regex.Replace(XMLString, @"(<Run.*?)>", "$1 Text=\"", RegexOptions.IgnoreCase);
Regex.Replace(XMLString, @"(?<=<Run.*?)>", " Text=\"", RegexOptions.IgnoreCase);
答案 3 :(得分:0)
您需要捕获要保留的文本,然后重新添加。我没有测试过,但是:
Regex.Replace(XMLString, @"<Run(.*?)>", "<Run$1 Text=\"", RegexOptions.IgnoreCase);