【问题标题】:Most efficient way of parsing HTML header tags order解析 HTML 标头标签顺序的最有效方法
【发布时间】:2013-02-13 16:25:04
【问题描述】:

我正在尝试确定给定页面是否不遵守标题标签(h1、h2 等)的顺序。事实上,我希望能够解析一堆页面,并返回每个 DONT 遵循标题顺序的页面。

我的第一个目标是能够确定 an 后面是否紧跟 h2 以外的其他内容。我通过以下模式实现了这一点

(?<=<h1[^<>]*>.+?)(?<!<h1[^<>]*>.+?<h2[^<>]*>.+?)<h[3-6][^<>]*>

以前的正则表达式对我有用,虽然它不是很有效并且远非完美。

所以,首先我想得到一些帮助来改进这个模式,如果可能的话,我想解释一下我的旧模式以及它为什么效率低下的原因。 在第二个,我想升级/修改模式以实现最初的目标,即确保文档标题标签顺序得到尊重。

注意: 我正在使用 RegexHero 进行基准测试

I know Regular Expressions are typically not best practice for parsing HTML 但这对我来说更像是一个练习,可以更有效地使用环视、原子分组等,感谢您的理解。

我们可以使用以下模式和以下文本作为示例

模式:

 (?<=lol1.+?)(?<!lol1.+?lol2.+?)lol[3-6]

文字:

lol1 bla lol3 bla lol2 bla lol4

【问题讨论】:

  • 如果我每次看到有人尝试用 Regex 解析 html 或 xml 时都得到一个镍币...
  • @YuriyFaktorovich 请查看更新
  • 嗯,您可以编辑标题以使其与 HTML 无关吗?
  • @bergi 如果您认为合适,请继续。

标签: .net regex regex-negation regex-lookarounds


【解决方案1】:

您可以做的是将您的标题序列提取到一个数组中,然后您可以对其进行操作。例如:

<h1><h3></h3></h1><h2><h3><h4></h4></h3></h2>

会翻译成:

[1,3,-3,-1,2,3,4,-4,-3,-2]

然后您可以使用简单的操作来验证您的结构(例如,从一个值到下一个值的跳转是 +/-1)。

正则表达式:

/(<h\d|<\/h\d)/g

【讨论】:

  • 您的回答确实有效,但它违背了我的问题的真正目的,即更好地了解环视和分组
猜你喜欢
  • 2015-07-11
  • 2011-02-18
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 2021-10-28
  • 1970-01-01
  • 2013-06-17
相关资源
最近更新 更多