【问题标题】:Escape quote in Python [closed]Python中的转义引号[关闭]
【发布时间】:2013-06-19 18:57:19
【问题描述】:

我正在尝试运行命令:

'"Isn\'t," she said.'

输出是: "Isn\'t," she said.

为什么输出不是: "Isn't," she said.

有人知道这是什么规则吗?谢谢

【问题讨论】:

  • 如果你打印'"Isn\'t," she said.'输出是"Isn't," she said.这是什么问题
  • 字符串前是否有r(如:r'"Isn\'t," she said.')?

标签: python escaping backslash


【解决方案1】:

您会看到表示对象的两种不同方式(reprstr)之间的区别。

>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
>>> print '"Isn\'t," she said.'
"Isn't," she said.

在第一种情况下,python 默认使用repr——然而,print 函数/语句隐式使用str。请注意,object.__repr__ 的数据模型中建议了这两种方法之间的主要区别:

如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)。

换句话说,您可以使用eval(repr('"Isn\'t," she said.')),它会起作用。 (这种行为并非对所有对象都有保证,只是建议。因为字符串是如此简单的对象,所以它可以工作)。但是,eval(str('"Isn\'t," she said.')) 将不起作用,因为您会遇到引用问题。

【讨论】:

  • +1,这很聪明——这比我的回答更有可能。
  • 是的,eval(str('"Isn\'t," she said.')) 不会像你说的那样工作。但是,报价问题到底是怎么回事?反斜杠在其他情况下也有效,例如:'"Isn\"t,"她说。反斜杠有什么隐藏规则吗?
  • @Roger -- 当 python 在字符串上调用repr 时,它会在字符串的开头和结尾添加一个单引号,并转义字符串中的任何单引号。相当于"'"+s.encode('string_escape')+"'"
  • 谢谢!上面的解释真的很清楚!
【解决方案2】:

我唯一能想到的是您使用的是raw string,它会在字符串中留下反斜杠并且不会将它们解释为转义字符。

print('"Isn\'t," she said.')
>>> "Isn't," she said.

print(r'"Isn\'t," she said.')
>>> "Isn\'t," she said.

【讨论】:

  • 不,我没有使用原始字符串,我很确定字符串之前没有'r'。在其他情况下,它可以正常工作。这就是让我感到困惑的地方。在Python 3.3.2中,是否与Python版本有关。
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 2012-10-05
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多