如何用反斜杠打印这个字符串

Posted

技术标签:

【中文标题】如何用反斜杠打印这个字符串【英文标题】:How can I print this string with backslash 【发布时间】:2015-02-26 14:46:14 【问题描述】:

更新说明

我必须从服务器复制功能。这个旧服务器的响应之一是这里看到的http://test.muchticket.com/api/?token=carlos&method=ventas&ESP=11,除了双斜杠应该是单斜杠。

更新结束

第 2 条更新说明

这个变量然后进入一个字典,该字典被转储到一个带有这个的 HttpResponse

return HttpResponse(json.dumps(response_data,sort_keys=True), content_type="application/json")

我讨厌我的工作。

更新结束

我需要将'http:\/\/shop.muchticket.com\/' 存储在一个变量中。然后将其保存在字典中。我尝试了几种不同的方法,但它们似乎都不起作用,以下是我尝试过的一些示例:

url = 'http:\/\/shop.muchticket.com\/'
print url

>> http:\\/\\/shop.muchticket.com\\/

用原始的

url = r'http:\/\/shop.muchticket.com\/'
print url

>> http:\\/\\/shop.muchticket.com\\/

带有转义字符

url = 'http:\\/\\/shop.muchticket.com\\/'
print url

>> http:\\/\\/shop.muchticket.com\\/

原始和转义字符

url = r'http:\\/\\/shop.muchticket.com\\/'
print url

>> http:\\\\/\\\\/shop.muchticket.com\\\\/

转义字符和解码

url = 'http:\\/\\/shop.muchticket.com\\/'
print url.decode('string_escape')

>> http:\\/\\/shop.muchticket.com\\/

仅解码

url = 'http:\/\/shop.muchticket.com\/'
print url.decode('string_escape')

>> http:\\/\\/shop.muchticket.com\\/

【问题讨论】:

错误。您是否尝试过按原样打印网址? url = 'http://shop.muchticket.com/' print(url) output: http://shop.muchticket.com/ 为什么要转义正斜杠? 我没有转义正斜杠,我需要这样 r'http:\/\/shop.muchticket.com\/' 为我工作。 暂时忘记 json 和 Web 服务器。您能否从以下两种选择中选择一种:您想要'\x2f' 还是您想要url 中的'\x5c\x2f'?如果它是一个 url,那么你应该更喜欢 '\x2f' 或者因为它通常写成 '/' - 按照@Bhargav Rao 的建议删除反斜杠。 【参考方案1】:

最好的办法是不要使用任何转义序列

>>> s =  'http://shop.muchticket.com/'
>>> s
'http://shop.muchticket.com/'
>>> print(s)
http://shop.muchticket.com/

与“其他”语言不同,您不需要在 Python 中转义正斜杠 (/)!

如果你需要正斜杠,那么

>>> s =  'http:\/\/shop.muchticket.com\/'
>>> print(s)
http:\/\/shop.muchticket.com\/

注意:当您在解释器中键入 s 时,它会为您提供 repr 输出,因此您会得到转义的正斜杠

>>> s
'http:\\/\\/shop.muchticket.com\\/'   # Internally stored!!!
>>> print(repr(s))
'http:\\/\\/shop.muchticket.com\\/'

因此,拥有一个 \ 就足以将其存储在一个变量中。

正如J F S 所说,

为避免歧义,请使用 raw string 文字或 escape 如果您想在字符串中使用文字反斜杠,则使用反斜杠。

因此您的字符串将是

s =  'http:\\/\\/shop.muchticket.com\\/'  # Escape the \ literal
s = r'http:\/\/shop.muchticket.com\/'     # Make it a raw string

【讨论】:

我没有转义正斜杠,我需要这样 @SantiagoQuiroga 您的预期输出是什么? 就是这样:http:\/\/shop.muchticket.com\/ @SantiagoQuiroga 这就是我要告诉你的,它们在内部是这样存储的。你把它们放在一个变量中,然后把它们设为值,你会得到正确的输出! 为避免歧义,如果您想在字符串中使用文字反斜杠,请使用原始字符串文字或转义反斜杠:r'\/''\\/'【参考方案2】:

如果您在字符串中需要 两个 字符:反斜杠 (REVERSE SOLIDUS) 和正斜杠 (SOLIDUS),那么所有三个 Python 字符串文字都会生成相同的字符串对象

>>> '\/' == r'\/' == '\\/' == '\x5c\x2f'
True
>>> len(r'\/') == 2
True

最好的写法是:r'\/''\\/'

原因是反斜杠是 字符串文字 中的一个特殊字符(你用 Python 源代码编写的东西(通常是手工编写的)),如果它后面跟着某些字符,例如 @987654327 @ 是 单个 字符(换行符),'\\' 也是单个字符(反斜杠)。但是'\/' 不是转义序列,因此它是 两个 字符。为避免歧义,请使用原始字符串文字 r'\/',其中反斜杠没有特殊含义。

REPL 在字符串上调用repr 来打印它:

>>> r'\/'
'\\/'
>>> print r'\/'
\/
>>> print repr(r'\/')
'\\/'

repr() 显示您的 Python 字符串文字(您将如何在 Python 源代码中编写它)。 '\\/' 是两个字符串,而不是三个。不要混淆用于创建字符串的字符串字面量和字符串对象本身。

并测试理解:

>>> repr(r'\/')
 "'\\\\/'"

它显示了字符串的表示形式。

【讨论】:

这里我有一个测试站点,变量存储为 url = r'http:\/\/shop.muchticket.com\/' 但它没有按预期显示test.muchticket.com/api/…跨度> @SantiagoQuiroga:我已经更新了关于repr(obj)obj 之间区别的答案。看看它是否有助于更好地理解问题。 好!这就是我想告诉 OP 的!【参考方案3】:

对于 Python 2.7.9,运行:

url = "http:\/\/shop.muchticket.com\/"
print url

结果为:

>> http:\/\/shop.muchticket.com\/

您使用的 Python 版本是什么?从 Bhargav Rao's answer 看来,它似乎也应该在 Python 3.X 中工作,所以也许这是一些奇怪的导入的情况?

【讨论】:

以上是关于如何用反斜杠打印这个字符串的主要内容,如果未能解决你的问题,请参考以下文章

转义反斜杠在javascript中打印两个反斜杠

如何用反斜杠和空格“\”替换空格,以便 bash shell 脚本可以从 .tsv 文件中读取文件名并执行 rsync 复制

JSON 用反斜杠打印

javascript反斜杠 “\” 的有啥特殊作用?

sed命令反斜杠的转义

为啥这个 Haskell 程序会产生反斜杠?