例如:
<p>
<b>Member Since:</b> Aug. 07, 2010<br><b>Time Played:</b> <span class="text_tooltip" title="Actual Time: 15.09:37:06">16 days</span><br><b>Last Game:</b>
<span class="text_tooltip" title="07/16/2011 23:41">1 minute ago</span>
<br><b>Wins:</b> 1,017<br><b>Losses / Quits:</b> 883 / 247<br><b>Frags / Deaths:</b> 26,955 / 42,553<br><b>Hits / Shots:</b> 690,695 / 4,229,566<br><b>Accuracy:</b> 16%<br>
</p>
我想得到1,017
。它是标记后面的文字,包含文字Wins:
如果我使用正则表达式,它将是[/<b>Wins:<\/b> ([^<]+)/,1]
,但如何使用Nokogiri和XPath?
或者我应该用正则表达式更好地解析这部分页面吗?
答案 0 :(得分:3)
下面
doc = Nokogiri::HTML(html)
puts doc.at('b[text()="Wins:"]').next.text
答案 1 :(得分:1)
您可以使用此XPath://*[*/text() = 'Wins:']/text()
它将返回1,017
。
关于正则表达式:RegEx match open tags except XHTML self-contained tags
答案 2 :(得分:1)
我会使用纯XPath:
"//b[.='Wins:']/following::node()[1]"
我已经听过数千次(并且来自大师)“从不使用正则表达式解析XML”。你能提供一些“令人震惊”的参考资料,证明这句话不再有效吗?
答案 3 :(得分:0)
使用强>:
//*[. = 'Wins:']/following-sibling::node()[1]
如果这是不明确的(选择多个节点),可以指定更严格的表达式:
//*[. = 'Wins:']/following-sibling::node()[self::text()][1]
或者:
(//*[. = 'Wins:'])[1]/following-sibling::node()[1]
或者:
(//*[. = 'Wins:'])[1]/following-sibling::node()[self::text()][1]