【问题标题】:How to use regular expression to extract data with html content?如何使用正则表达式提取带有 html 内容的数据?
【发布时间】:2012-12-07 04:49:42
【问题描述】:

我有以下 html 内容,我只想使用正则表达式提取 ID,例如 31673 31672 3166 316。

<a href="/CaseMgrTesting/Pat/Summary/31673">31673</a>
<a href="/CaseMgrTesting/Pat/Summary/31672">31672</a>
<a href="/CaseMgrTesting/Pat/Summary/3166">3166</a>
<a href="/CaseMgrTesting/Pat/Summary/316">316</a>

我创建如下正则表达式,不幸的是它只返回 31673 31672。我还想删除像 href="/CaseMgrTesting/Pat/Summary/ 和 \d\d​​\d\d\d 这样的硬代码,任何人都可以给我正确的正则表达式将不胜感激。

(?<=<a\shref="/CaseMgrTesting/Pat/Summary/\d\d\d\d\d">).*(?=</a>)

【问题讨论】:

  • 简单:你不知道。您将使用 HTML 解析器。
  • 您是否尝试使用正则表达式来解析 html?如果是这样,您可能想阅读以下内容:stackoverflow.com/questions/1732348/…
  • 每次您使用正则表达式进行 HTML 解析时,另一位 Web 开发人员都会突然产生连续七年在角落里默默哭泣的冲动。
  • 另外,不是要精确匹配最多五位数字吗?我对正则表达式仍然生疏,无法谈论太多。这也许可以解释为什么你只得到五个。
  • 就像@CBredlow 说的:(?&lt;=&lt;a\shref="/CaseMgrTesting/Pat/Summary/\d+"&gt;).*(?=&lt;/a&gt;)

标签: asp.net html regex html-parsing


【解决方案1】:

您的一站式答案是 Html Agility Pack。这个漂亮的必备工具允许您按节点处理 HTML。学习它。活下去。喜欢它。

【讨论】:

  • 感谢温博!!!我相信“Html Agility Pack”是一种在 html 代码中提取数据的好方法。我会学习的。实际上,我提出以上问题的目的是学习正则表达式,这让我很头疼但非常强大。多年来我讨厌正则表达式,但最近我发现我的天才前经理的代码在使用它,3 行验证代码涵盖了非常非常复杂的逻辑。
【解决方案2】:
<a .*?>(.*)</a>

对这个问题使用这个正则表达式。简单的一试。

【讨论】:

  • 好答案。我编辑了你的答案,因为你没有缩进代码,这导致了一些不可见的代码。
【解决方案3】:

使用这个(正则表达式的更新答案):

<a .*?>(.*?)</a>

其中重要的部分是* 之后的?。这将使.*(匹配所有)非贪婪,否则您最多只能匹配一个。

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 2010-09-26
    • 2015-02-24
    • 2011-04-07
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2016-08-01
    • 2010-11-27
    相关资源
    最近更新 更多