正则表达式提取具有多个元素的html源代码

时间:2013-05-15 13:35:33

标签: html regex

在你告诉我不要使用Regex解析html之前,我知道这一点,但是我的公司使用Iconico Data Extractor从其网站中提取数据,它允许你创建自定义脚本,但它必须是常规的在javascript中的表达式,因此我坚持使用RegEx来实现我的目标。

我需要的是采用以下示例html并提取每一行

  <b>Item 1</b> Text <br>
  <b>Item 2</b> Text <br>
  <b>Item 3</b> Text <br>
<p><font color="#000000" face="Arial, Helvetica, sans-serif"><b>Item 4:</b></font></p>
<p><font color="#000000" face="Arial, Helvetica, sans-serif">Detailed Description</font></p>

我需要的是将每个项目分解为一个表达式,以检索所有带有标签的行,以及它在html中的显示方式。我已经尝试了/<b>*details(.|\s)*?\/a>/gi这让我得到了第4项。但我无法弄清楚如何获得第1至3项,因为我需要的只是从/<b>*Item 1(.|\s)*?\br>/gi开始的行而不是工作和几小时的玩弄它我没有进一步前进。如果可能的话,我也需要摆脱字体标签。我认为由于中间有一个结束</b>而变得复杂。

任何人都可以就如何设置表达式提供一些建议。我已经知道对于正则表达式来说一般的共识是不对的,所以不需要再次走这条路了:)

这对我来说都很新鲜,所以希望我已经解释了我想要做的事情。

提前致谢

2 个答案:

答案 0 :(得分:1)

我使用正则表达式解析html才能正常工作。我使用了类似下面的东西。你可以看到有很多“。*?”这意味着非贪婪匹配任何角色。非常有用。

您使用的是哪种语言?您可能必须设置选项以允许解析换行符,否则它可能会将每一行视为单独的输入。

在python中添加re.DOTALL选项。在PHP中,有一个特殊的斜杠标记可供使用。

<b>(.*?)<br>.*?<b>(.*?)<br><b>(.*?)<br><p.*?sans-serif"><b>(.*?)</p>.*?serif">(.*?)</p>

答案 1 :(得分:0)

为了将这个与数据提取器一起使用,我已经做了一些关于在两个关键字之间获取数据的研究,而(Item 1:.*?<br>)/gi的工作非常出色。

不幸的是,我现在被告知必须从现在开始剥离标签,所以我需要抓住那个标签。如果我需要帮助,我会发一个新问题。

非常感谢您回复并尝试提供帮助