У меня есть объект lxml etree HTMLParser, с которым я пытаюсь создать xpaths, чтобы утверждать xpaths, атрибуты 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, экранируя ' и " с помощью \' и \"