2010-05-03 7 views
19

Böyle inşaat kullanıyorum:Düzenli ifadeyi lxml xpath içinde nasıl kullanılır?

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

Ama "Bazı metin" ile başlayan metin var tüm bağlantıları seçmeniz gerekir, bu yüzden merak ediyorum regexp'in burada kullanmak için herhangi bir yolu var mı? (Örneğin normal ifadeleri gerekmez rağmen)

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

cevap

32

Bunu yapabilirsin: Lxml belgelerinde şey bulamadık

+1

Benim için çalışmıyor, '' match (., 'Some text') '. Bu arada '' 'bölümünü anlamıyorum. Ve func 'test' aynı sonuca sahiptir (bence aslında 'test' kullanmak daha mantıklıdır: P) – lajarre

+1

Benim için de işe yaramıyor. – Luke

+0

[buna bakın] (http://stackoverflow.com/a/17293795/786559) ad alanlarını geçmekten sıkıldıysanız –

15

Sen starts-with() işlevini kullanabilirsiniz. Lxml, EXSLT uzantısı işlevlerinden düzenli ifadeleri destekler. o xpath ifadesi tribünlerde öneki "yeniden" bilir ki, sen ad eşlemesi vermek gerekir

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

Not (XPath class için Lxml dokümanlar bakın, ama aynı zamanda xpath() yöntemi için çalışır) için.