2010-05-03 8 views
19

estoy usando la construcción de esta manera:¿Cómo usar la expresión regular en lxml xpath?

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

Pero yo tenga que seleccionar todos los enlaces que tienen texto que comienza con "un poco de texto", por lo que me pregunto ¿hay alguna manera de utilizar la expresión regular aquí? No encontramos nada en la documentación lxml

Respuesta

32

Usted puede hacer esto (aunque no es necesario expresiones regulares para el ejemplo). Lxml admite expresiones regulares de las funciones de extensión EXSLT. (Véase la documentación LXML para el XPath class, pero también funciona para el método xpath())

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

en cuenta que necesita para dar la asignación de espacio de nombres, para que sepa lo que el "re" prefijo en las gradas expresión XPath para.

+1

No funciona para mí, lo hago: 'match (., 'Some text')'. Por cierto, no entiendo muy bien la parte '.'. Y func 'test' tiene el mismo resultado (creo que tiene más sentido usar' test' en realidad: P) – lajarre

+1

No funciona para mí tampoco. – Luke

+0

[ver esto] (http://stackoverflow.com/a/17293795/786559) si está cansado de pasar los espacios de nombres –

15

Puede utilizar la función starts-with():

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