如何将文本封装到标签中?

时间:2011-02-02 10:13:19

标签: c# regex string

假设我们有这样的字符串变量:

string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>" 
  • 字符串,其中可以包含一些html标签。

问题是如何将每个“非taged”文本部分封装到某个标记中,以获得这样的smth:

string output = "<plain>First regular, </plain><b>bold</b><plain>,</plain><i>italic</i><plain>,</plain><u>underline</u><plain>,</plain><b><i><u>bold+italic+underline</u></i></b>"

如何在C#中执行此操作?正则表达式?怎么看这样的正则表达式?

也许封装不是一个好的开始,我需要的是从:

创建xml结构
 string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>"

我需要创建

XDocument xml = XDocument.Parse("<plain>First regular, </plain><b>bold</b><plain>,</plain><i>italic</i><plain>,</plain><u>underline</u><plain>,</plain><b><i><u>bold+italic+underline</u></i></b>")

1 个答案:

答案 0 :(得分:0)

这段代码有点失败,但它应该让你走上正确的道路:

string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>";
input = "<data>" + input + "</data>";
XmlDocument xml = new XmlDocument();
xml.InnerXml = input;
XmlNodeList nodes = xml.SelectNodes("//text()");
foreach (XmlNode node in nodes) {
    if (node.ParentNode.Name != "b" && node.ParentNode.Name != "i" && node.ParentNode.Name != "u") {
        node.InnerText = "^^^^^" + node.InnerText + "$$$$$";
    }
}
input = xml.DocumentElement.InnerXml.Replace("^^^^^", "<plain>").Replace("$$$$$", "</plain>");