我正在尝试使用XPath表达式在HTML页面中提取价格和货币(例如this webpage)。
我试过了:
$x("//*[matches(text(),'^\$\d+\.\d{1,2}')]")
在Firefox的控制台中,但它会打印undefined
。我寻找基于正则表达式的解决方案。
答案 0 :(得分:1)
在您的示例中,因为您使用matches
,我推断您使用 XPath 2 。但可能,您的浏览器不支持它。检查您的XPath version。
另一个适用于XPath 1的版本如下所述。
请注意,<span>
元素的XPath如下所示:
//*[@id="result_0"]/div/div[3]/div[1]/a/span
//*[@id="result_1"]/div/div[3]/div[1]/a/span
//*[@id="result_2"]/div/div[3]/div[1]/a/span
因此,您需要为该id使用正则表达式并从span中获取文本。
您可以使用matches
( XPath2 )或starts-with
( XPath1 )作为第一部分,text()
获取来自span
的文字。因此,要在浏览器中测试它,请使用以下内容:
$x('//*[starts-with(@id,"result_")]/div/div[3]/div[1]/a/span/text()')
答案 1 :(得分:0)
以下正则表达式怎么样? :
\/\/\*\[\@id="result_\d+"\]\/div\/div\[3\]\/div\[1\]
实际上你只需要从相对的Xml标签访问页面的源代码并通过右键单击并选择copy xpath
来获取它的XPath然后如果你想使用正则表达式来解决你需要的所有情况正则表达式字符并使用\d+
作为结果编号。