XPath, чтобы найти все ссылки только с цифрами?

Я выбрал элемент на странице, содержащий нужные мне ссылки на страницы. Они вроде как <a href="blah">1</a>. Я хочу использовать регулярное выражение с xpath, чтобы я мог получить все ссылки, подобные этой, текст которой \d+.

Я вижу, что здесь есть ответ: Как использовать регулярное выражение в lxml xpath? но я не понимаю в этом смысла.

В частности, «Обратите внимание, что вам нужно указать сопоставление пространства имен, чтобы оно знало, что означает префикс «re» в выражении xpath».

Вот код очищенной страницы: <div class="pagination"> <b>1</b> <a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=25">2</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=50">3</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=75">4</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=100">5</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=125">6</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=150">7</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=175">8</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=200">9</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=225">10</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=250">11</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=25" alt="next">›</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=325" alt="last page">»</a><br><br><br><br><iframe hspace="0" vspace="0" border="0" marginheight="0" marginwidth="0" allowtransparency="true" src="http://notrelevant.com" frameborder="0" height="98" scrolling="no" width="736"></iframe></div>

Мой код до сих пор:

answer = browser.open(address)
tree = lxml.html.parse(answer)
numbers = tree.xpath("//div[contains(@class, 'pagination')]")[0]

person rdernga    schedule 18.04.2011    source источник


Ответы (2)


XPath не предоставляет средств для сопоставления с регулярным выражением.

Однако расширение, используемое в сообщении, на которое вы ссылаетесь, должно позволять работать следующим образом:

//div[contains(@class, 'pagination')]/a[re:match(text(), '^\d+$')]
person ikegami    schedule 18.04.2011
comment
Вы написали, что XPath не предоставляет средств для сопоставления с regexp. Это неправильно. Это последняя спецификация XPath w3.org/TR/xpath20. - person ; 18.04.2011

Вам не нужно RegExp для этого выражения XPath:

//div[
   contains(
      concat(' ',@class,' '),
      ' pagination '
   )
]/a[
  floor()=.
]
person Community    schedule 18.04.2011