这是HTML的一部分,我试图从中提取一些信息:
<div class="pagination">
<p>
<span>Showing</span>
1-30
of 3744
<span>results</span>
</p>
</div>
我只是希望从我拉出的位(3744
内的所有内容)中存储<p>
,但由于of 3744
没有任何CSS,我很难过样式,我根本不理解XPath:)
<span>Showing</span>1-30\nof 3744<span>results</span>
如何解析上面的字符串以仅检索结果总数?
答案 0 :(得分:2)
只要它看起来一直相同,您也可以使用#scan
来获取最后一个数字。
str = '<div class="pagination">
<p>
<span>Showing</span>
1-30
of 3744
<span>results</span>
</p>
</div>'
str.scan(/\d+/).pop.to_i
#=> 3744
更新说明其工作原理
scan
会提取所有数字的Array
,例如["1","30","3744"]
然后它将pop
Array
"3744"
中的最后一个元素,然后将其转换为整数3744
。
请注意,如果您想要的号码不是Array
中的最后一个元素,那么这将无法正常工作。
str = '<div class="pagination">
<p>
<span>Showing</span>
1-30
of 3744
<span>results 14</span>
</p>
</div>'
str.scan(/\d+/).pop.to_i
#=> 14
正如您所看到的,因为我在结果范围内添加了数字14,现在这是数组中的最后一个数字,结果已关闭。所以你可以把它修改成这样的东西:
str.gsub(/\s+/,'').scan(/\d+-\d+of(\d+)/).flatten.pop.to_i
#=> 3744
这将使用gsub
删除所有空格,然后查找等同于#{1,}-#{1,}of#{1,}
行的某个模式并捕获最后一个组#=> [["3744"]]
然后{{1} } flatten
Array
然后#=> ["3744"]
并转换为pop
。这似乎是一个更好的解决方案,因为它将确保每次匹配“####”部分。
答案 1 :(得分:1)