Python将r放在unicode字符串变量之前

时间:2015-04-01 11:37:41

标签: python string python-2.7 encoding

对于静态字符串,将r放在字符串前面将给出原始字符串(例如r'some \' string')。由于无法将r放在unicode字符串变量的前面,将字符串变量动态转换为原始形式的最小方法是什么?我应该用双反斜杠手动替换所有反斜杠吗?

str_var = u"some text with escapes e.g. \( \' \)"
raw_str_var = ???

2 个答案:

答案 0 :(得分:3)

如果您确实需要转义字符串,假设您要将换行符打印为\n,则可以将encode方法与特定于Python的string_escape编码一起使用:

>>> s = "hello\nworld"
>>> e = s.encode("string_escape")
>>> e
"hello\\nworld"
>>> print s
hello
world
>>> print e
hello\nworld

您没有提及任何有关unicode或您正在使用的Python版本的内容,但如果您正在处理unicode字符串,则应使用unicode_escape代替。

>>> u = u"föö\nbär"
>>> print u
föö
bär
>>> print u.encode('unicode_escape')
f\xf6\xf6\nb\xe4r

你的帖子最初有正则表达式标签,也许re.escape正是你真正想要的?

>>> re.escape(u"foo\nbar\'baz")
u"foo\\\nbar\\'baz"

不是“双重逃脱”,即打印上面的字符串会产生:

foo\
bar\'baz

答案 1 :(得分:2)

无需转换 - r前缀仅在源代码表示法中有用,而不是程序逻辑。

通常,如果在普通字符串中使用单个反斜杠,如果它没有启动有效的转义序列,它将自动转换为双反斜杠:

>>> "\n \("
'\n \\('

由于可能难以记住所有有效/无效的转义序列,因此引入了原始字符串表示法。但是在定义字符串之后没有办法也不需要转换它。

在您的情况下,正确的方法是使用

str_var = ur"some text with escapes e.g. \( \' \)"

恰好在这里产生相同的字符串,但更明确。