如何正确逃生单引号和双引号

我有我试图建立与XPath的断言的XPath一个LXML etree的HTMLParser对象,属性是标签的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变量的不同变化基本上是标签的预期的文本,在这种情况下:这是我的“测试”“串”

当我尝试使用的HTMLParser对象的XPath的方法失败

tree.xpath(self.getXpath()) 

原因是因为它得到了XPath是这个“/html/body/p[starts-with(.,'Here是我的'test'“string”')and 1 = 1]'

如何正确地从self.text变量中转义单引号和双引号?我尝试了三重引用,在repr()中包装self.text,或者做一个re.sub或string.replace转义'和'与\'和\“

回答:

据我们可以看到in Wikipedia和w3 school,你不应该有'"中的节点的内容,即使只有<&被说成是非法stricly。它们应该被替换为相应的“预定义实体引用”,即&apos;&quot;

顺便说一句,我用会照顾这个透明的Python的解析器:写作时,它们被替换;阅读时,它们会被转换。

经过第二次阅读您的答案后,我在Python解释器中测试了一些与'等相关的东西。它会为你逃脱一切!

>>> 'text {0}'.format('blabla "some" bla') 

'text blabla "some" bla'

>>> 'ntsnts {0}'.format("ontsi'tns")

"ntsnts ontsi'tns"

>>> 'ntsnts {0}'.format("ontsi'tn' \"ntsis")

'ntsnts ontsi\'tn\' "ntsis'

所以我们可以看到Python正确地转义了事物。你能复制粘贴错误信息吗(如果有的话)?

回答:

有更多的选项可供选择,尤其是"""'''可能是你想要的。

s = "a string with a single ' quote" 

s = 'a string with a double " quote'

s = """a string with a single ' and a double " quote"""

s = '''another string with those " quotes '.'''

s = r"raw strings let \ be \"

s = r'''and can be added \ to " any ' of """ those things'''

s = """The three-quote-forms

may contain

newlines."""

以上是 如何正确逃生单引号和双引号 的全部内容, 来源链接: utcz.com/qa/261083.html

回到顶部