XPathEvalError: función no registrada para coincidencias () en lxml

Estoy tratando de usar la siguiente consulta xpath en Python

from lxml.html.soupparser import fromstring root = fromstring(inString) nodes = root.xpath(".//p3[matches(.,'ABC')]//preceding::p2//p3") 

pero me da el error

  nodes = root.xpath(".//p3[matches(.,'ABC')]//preceding::p2//p3") File "lxml.etree.pyx", line 1507, in lxml.etree._Element.xpath (src\lxml\lxml.etree.c:52198) File "xpath.pxi", line 307, in lxml.etree.XPathElementEvaluator.__call__ (src\lxml\lxml.etree.c:152124) File "xpath.pxi", line 227, in lxml.etree._XPathEvaluatorBase._handle_result (src\lxml\lxml.etree.c:151097) File "xpath.pxi", line 212, in lxml.etree._XPathEvaluatorBase._raise_eval_error (src\lxml\lxml.etree.c:150896) lxml.etree.XPathEvalError: Unregistered function 

¿Cómo puedo usar las funciones XPath 2.0 aquí con lxml?

Aclaración

Yo estaba usando la función contiene anteriormente como

 nodes = root.xpath(".//p3[contains(text(),'ABC')]//preceding::p2//p3") 

El problema es que mi xml tiene nuevas líneas y espacios en blanco en el texto, por lo tanto, intenté usar algo como

 nodes = root.xpath(".//p3[contains(normalize-space(),'ABC')]//preceding::p2//p3") 

pero esto no tiene efecto. Finalmente traté de usar la función de coincidencias y obtuve el error.

XML de muestra

     1 2  ABC  3   4 5 ABC 6      7 8 ABC  9   10 11 ABC 12    

Como se mencionó en la otra respuesta, destacando en la otra parte de la documentación citada, puede usar las extensiones EXSLT para tener una función de coincidencia de expresiones regulares match() con lxml, por ejemplo:

 ...... ns = {"re": "http://exslt.org/regular-expressions"} nodes = root.xpath(".//p3[re:match(.,'ABC')]//preceding::p2//p3", namespaces=ns) 

¿Cómo puedo usar las funciones XPath 2.0 aquí con lxml?

No puedes ( referencia ):

lxml es compatible con XPath 1.0 , XSLT 1.0 y las extensiones EXSLT a través de libxml2 y libxslt de una manera compatible con los estándares.

contains() es probablemente lo más cerca que puede acercarse en este caso:

 .//p3[contains(., 'ABC')]//preceding::p2//p3