Существует совпадений () , которые можно использовать для сопоставления требуемой строки с помощью регулярного выражения:
//a[matches(@href,'^/static_word/[A-Za-z0-9_-]+/[0-9]+$')]
, но AFAIK lxml
не поддерживает функции XPath 2.0
Вместо этого вы можете попробовать это:
//a[starts-with(@href, '/static_word/') and
(string-length(@href)-string-length(translate(@href, '/', '')))=3 and
number(substring-after(substring-after(@href, '/static_word/'), '/'))>=0]
Указанный выше предикат должен соответствовать:
starts-with(@href, "/static_word/")
- a
узел с @href
, который начинается с подстроки '/static_word/'
(string-length(@href)-string-length(translate(@href, '/', '')))=3
- также @href
содержит ровно 3 слеша number(substring-after(substring-after(@href, '/static_word/'), '/'))>=0
- последняя подстрока - любое положительное число
Это выглядитужасно, но должно работать :) 1029 *