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

2024-04-28 21:25:09 发布

您现在位置:Python中文网/ 问答频道 /正文

对于静态字符串,在字符串前面加一个r将得到原始字符串(例如r'some \' string')。既然不能将r放在unicode字符串变量前面,那么动态地将字符串变量转换为其原始形式的最小方法是什么?是否应该手动将所有反斜杠替换为双反斜杠?在

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

Tags: 方法字符串textstringvarwithunicode静态
2条回答

没有什么要转换的-r前缀只在源代码表示法中有意义,对程序逻辑没有意义。在

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

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

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

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

^{pr2}$

这恰好导致了相同的字符串,但更显式。在

如果您真的需要转义一个字符串,假设您想将换行符打印为\n,那么您可以将^{}方法与特定于Python的{a2}编码一起使用:

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

您没有提到unicode的任何内容,或者您使用的是哪个Python版本,但是如果您处理的是unicode字符串,那么应该使用unicode_escape。在

^{pr2}$

你的帖子最初有regex标签,也许^{}才是你真正想要的?在

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

不是“双转义”,即打印上述字符串会产生:

foo\
bar\'baz

相关问题 更多 >