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要素に属性を追加できます。正規表現を使用するよりも優れたオプションです。

次のようなものを試してください。

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 に答える