在Python中,str.replace是否以相同的方式处理双引号和单引号?

时间:2018-08-09 17:50:00

标签: python

对我来说,我是Python的新手。我编写了一个简单的脚本来分析长字符串,其中包含用单引号引起来的多个子字符串。我使用str.replace将单引号替换为空字符串。但是,输入字符串改为用双引号引起来。我偶然用新输入运行了脚本,但令我惊讶的是,它仍然将所有双引号替换为空字符串。

我以为我在Python的某个地方阅读过,双引号和单引号被视为相同。那是正确的说法吗?

更新:

我道歉。我一定已经把这个问题包括我自己弄糊涂了。我运行了快速测试脚本以验证我从原始脚本中看到的输出,但是看不到相同的输出。我试图将包含双引号的输入字符串替换为双引号(例如,将str="foo \"abc\" \"efg\""替换为str.replace("'",""),但是没有这样做。我不得不重新检查原始脚本并尝试解析输入字符串。谢谢您花点时间研究这个线程。

我只是验证了原始脚本的一部分(相当长而且有点复杂,因为我没有在问题中说出这个脚本的全部真相,对此感到抱歉)误导了我相信(一段时间)Python str.replace以相同的方式对待双引号和单引号,这是错误的假设。

2 个答案:

答案 0 :(得分:2)

在python中,它们被视为相同。但这意味着就语言而言,您可以使用单引号或双引号。但是,它们不是同一字符。如果有例如

adjacency_df <- crossprod(table(test)
Error in table(adjacency_df) : 
  attempt to make a table with >= 2^31 elements

外部双引号只是分隔字符串,而内部单引号是字符串本身的一部分。因此,如果您运行

text = "I said 'hello' to him"

它们的单引号将被替换。但是如果你这样做

text.replace("'", "")

什么都没有发生,因为您的字符串不包含双引号

答案 1 :(得分:1)

单引号和双引号在您的代码中被相同的 处理。换句话说,

'Hello' == "Hello"

,无论您使用'还是"都没有区别。

但是,假设您有一个包含 个字符'"的字符串:

long_string = "So I said 'and what do you mean by that?' and she responded 'I dunno' and ..."

这是一个包含'字符的字符串。请注意,我使用"作为字符来在代码中指定此字符串。因此,我可以在字符串中使用'个字符,而不必对其进行转义。反之亦然:

>>> print( '"' )   # "
>>> print( "'" )   # '

如果要在双引号字符串中使用双引号字符,则必须转义它:

>>> print( "\"" )  # "
>>> print( '\'' )  # '

现在,回到您的问题。您有一个像long_string这样的字符串,其中包含单引号字符。要删除它们,您只需执行

string_without_quotes = long_string.replace( "'", "" ) # or '\''