【问题标题】:Regex for html tags that are encapsulated by table elements由表格元素封装的 html 标签的正则表达式
【发布时间】:2015-01-25 05:26:31
【问题描述】:

我正在尝试创建返回表数或表数组的正则表达式。到目前为止我有

  @"<table>^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$</table>" 

html可以是

 <table>
   <p id='p1'></p>
 </table>
 <table>
   <p>abc</p>
 </table>

例如,如果我运行以下代码

    string str = "<table><p id='p1'></p></table><table><p>abc</p></table>";
    Regex r = new Regex(@"/<table>^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$</table>/");
    MatchCollection s = r.Matches(str);
    Response.Write(s.Count);

那么它应该写“2”,因为有两个表。

上述正则表达式未按预期工作。解析html的正则表达式似乎还可以,但是我很难将html的正则表达式和封装html的正则表达式(封装html元素的表)结合起来

【问题讨论】:

标签: c# html regex


【解决方案1】:

推荐使用Html Agility Pack

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(html);
var nodes = htmlDocument.DocumentNode.SelectNodes("//table");

【讨论】:

  • 好的方法并不好玩 :)... 正则表达式的艰难和痛苦的合并在哪里?在反向引用中建立技能?正确考虑随机空格?现在你整整一周都在为 OP 扼杀娱乐 :)
  • @AlexeiLevenkov, :),抱歉开玩笑!
  • 但我正在寻找正则表达式解决方案。你有点赞的想法吗?
  • @user1508643,HTML 不是常规语言,Regex 无法正确解析。您可以尝试理解有限的子集,但它永远不会是一个可靠的解决方案。
  • @user1508643 - 有关 HTML 和正则表达式的教育阅读,请查看投票最多的 related 答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 2021-10-09
相关资源
最近更新 更多