У меня есть объект HTMLParser lxml etree, с помощью которого я пытаюсь создать xpath для утверждения xpath, атрибутов xpath и текста этого тега. Я столкнулся с проблемой, когда текст тега содержит либо одинарные кавычки ('), либо двойные кавычки ("), и я исчерпал все свои варианты.
Вот пример объекта, который я создал
parser = etree.HTMLParser()
tree = etree.parse(StringIO(<html><body><p align="center">Here is my 'test' "string"</p></body></html>), parser)
Вот фрагмент кода, а затем различные варианты переменной, читаемой в
def getXpath(self)
xpath += 'starts-with(., \'' + self.text + '\') and '
xpath += ('count(@*)=' + str(attrsCount) if self.exactMatch else "1=1") + ']'
self.text - это, в основном, ожидаемый текст тега, в данном случае: вот моя «тестовая» «строка»
это не работает, когда я пытаюсь использовать метод xpath объекта HTMLParser
tree.xpath(self.getXpath())
Причина в том, что получаемый xpath заключается в следующем '/html/body/p[starts-with(.,' Здесь моя "тестовая" "строка" ') и 1 = 1]'
Как правильно экранировать одинарные и двойные кавычки из переменной self.text? Я пробовал тройные кавычки, оборачивая self.text в repr (), или делая re.sub или string.replace, экранируя 'и' with \ 'and \ "