2010-05-03 7 views
19

J'utilise la construction comme ceci:Comment utiliser l'expression régulière dans lxml xpath?

doc = parse(url).getroot() 
links = doc.xpath("//a[text()='some text']") 

Mais je dois sélectionner tous les liens qui ont du texte commençant par « texte », donc je me demande est-il possible d'utiliser regexp ici? Vous ne trouvez rien dans la documentation lxml

Répondre

32

Vous pouvez le faire (bien que vous n'avez pas besoin des expressions régulières pour l'exemple). Lxml prend en charge les expressions régulières des fonctions d'extension EXSLT. (Voir les lxml docs pour le XPath class, mais cela fonctionne aussi pour la méthode xpath())

doc.xpath("//a[re:match(text(), 'some text')]", 
     namespaces={"re": "http://exslt.org/regular-expressions"}) 

Notez que vous devez donner le mappage d'espace de noms, pour qu'il sache ce que le préfixe « re » dans les tribunes d'expression XPath pour.

+1

Ne fonctionne pas pour moi, je fais: 'match (., 'Du texte')'. Au fait, je ne comprends pas très bien la partie "." Et func 'test' a le même résultat (je pense qu'il est plus logique d'utiliser' test' en réalité: P) – lajarre

+1

Ca ne marche pas non plus pour moi. – Luke

+0

[voir ceci] (http://stackoverflow.com/a/17293795/786559) si vous êtes fatigué de passer les espaces de noms –

15

Vous pouvez utiliser la fonction starts-with():

doc.xpath("//a[starts-with(text(),'some text')]") 
Questions connexes