我试图找到所有 id 以“post-{这里有很多数字}”开头的 div 标签 我尝试过这样的事情:
tree.xpath("//div[starts-with(@id,'post-[0-9]')]")
但并没有真正起作用。有没有办法在 python 中不导入正则表达式来做到这一点?
XPath 1.0 http://www.w3.org/TR/xpath不支持正则表达式,即函数starts-with不支持正则表达式。
starts-with
Lxml 不支持 XPath 2.0。您有以下三个选择:
切换到能够处理 XPath 2.0 的处理器。然后您可以使用fn:匹配() http://www.w3.org/TR/xpath-functions/#func-matches功能。
使用 XPath 1.0 兼容的解决方案。这相当丑陋,但它有效,并且在某些情况下可能是最简单的解决方案。然而,这不是一个通用的解决方案!它将替换中的数字@id with a -并与之匹配。所以如果原来的id是这样的post--。使用您知道不会出现在该位置的字符。
@id
-
id
post--
tree.xpath("//div[starts-with(translate(@id, '0123456789', '----------'), 'post--')]")
regexpNS = "http://exslt.org/regular-expressions" r = tree.xpath("//div[re:test(@id, '^post-[0-9]')]", namespaces={'re': regexpNS})