正则表达式替换HTML标记

时间:2015-09-02 17:22:37

标签: c# regex

我是正则表达式的新手,我正在尝试编写一个正则表达式,它会在字符串中找到所有<p></p>标记,并将其替换为<span>和{分别为{1}}。我想出了这个:

</span>

我也尝试过将2个字符串替换链接起来,但这些替换也没有用。

Regex rex = new Regex("<(p|P) />", RegexOptions.IgnorePatternWhitespace);
            storeHours = rex.Replace(storeHours, "<span />");

3 个答案:

答案 0 :(得分:2)

您不应该使用Regex进行HTML操作。您应该使用HTML解析器,您可以尝试使用HTML Agility Pack。这是一个例子:

public string ReplacePElement(string htmlContent) 
{
  HtmlDocument doc = new HtmlDocument();
  doc.LoadHtml(htmlContent);

  foreach(HtmlNode p in doc.DocumentNode.SelectNodes("p"))
  {
    string value = tb.InnerText.Length>0 ? tb.InnerText : "&nbsp;";
    HtmlNode lbl = doc.CreateElement("span");
    lbl.InnerHtml = value;

    tb.ParentNode.ReplaceChild(lbl, tb);
  }

  return doc.DocumentNode.OuterHtml;
}

答案 1 :(得分:2)

您的代码

storeHours = storeHours.Replace("<p>", "<span>").Replace("</p>", "</span>");

工作正常。我想你的问题可能与编码有关。你客户的代码是什么?

答案 2 :(得分:0)

如果您具有某些属性(例如style),则以下正则表达式会更好:

storeHours.replace(/<p\b/gmi, "<span");

(它也替换了打开和关闭标签。)