对于静态字符串,将r
放在字符串前面将给出原始字符串(例如r'some \' string'
)。由于无法将r
放在unicode字符串变量的前面,将字符串变量动态转换为原始形式的最小方法是什么?我应该用双反斜杠手动替换所有反斜杠吗?
str_var = u"some text with escapes e.g. \( \' \)"
raw_str_var = ???
答案 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. \( \' \)"
恰好在这里产生相同的字符串,但更明确。