如何用反斜杠打印这个字符串
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 中工作,所以也许这是一些奇怪的导入的情况?
【讨论】:
以上是关于如何用反斜杠打印这个字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何用反斜杠和空格“\”替换空格,以便 bash shell 脚本可以从 .tsv 文件中读取文件名并执行 rsync 复制