1

我一直在寻找一个 reg 表达式来将 html 元素分成 2 部分。首先是价格,其次是下载次数。这是我的 HTML,这是我尝试使用的 reg 表达式。我正在使用刮板程序,所以我不能使用 java-script 或 jQuery。

HTML:

<h2>$850 / 3Downlaods - Software Name</h2>

Re Expression 之前使用过 Marker:

/$\/\s*/

Re Expression used Marker After:

/\/\

这应该只返回 850。没有美元符号。我坚持如何开始和结束下载次数。我需要另一组之前和之后的正则表达式来拉取下载次数。还要排除“下载”一词。

我使用的程序是 OutWit Hub Scraper Link to docs

4

2 回答 2

1

<h2>如果在(更复杂的)两个()捕获组中没有其他嵌套标签,则/应该这样做:

/<h2>\s*\$(\d+)\s*\/\s*(\d+)\s*Downloads.+?<\/h2>/

这分解为<h2>,可选的空格\s*,,要捕获$的一些数字,更多的可选空格,要捕获的一组数字,更多可选的空格之前,任何字符(非贪婪)直到结束。(\d+)/Downloads</h2>

如果价格部分还可能包含,.(\d+)组,则可以替换为([0-9.,]+)(或者更具体地,以确保它,在必要时不以开头,例如)

/<h2>\s*\$([0-9,.]+)\s*\/\s*(\d+)\s*Downloads.+?<\/h2>/

关于使用正则表达式解析 HTML 的常见警告适用于此处。这只有在您的 HTML 输入相当可预测并且在<h2>.

于 2012-08-01T20:20:38.880 回答
1

试试这个:(?:.*\$)(\d+(?:\.\d+)?).*(\d+)(?:\s*Downloads.*)

这是发生了什么:

(?:.*\$)- 捕获并丢弃标签的开头,一直到它在美元符号后找到的第一个数字

(\d+(?:\.\d+)?)- 捕获美元金额(包括美分)

.*- 两个数字之间的任何废话

(\d+)- 下载次数

(?:\s*Downloads.*)- 标签的其余部分

我希望这会有所帮助!

于 2012-08-01T20:29:37.940 回答