如何在Python中从多个文字创建单个原始字符串?

pla*_*etp 0 python string string-literals

我希望将相邻的字符串组合成Python中的单个"原始"字符串,例如

>>> s = (
...     r"foo\tbar\n"
...     "baz\tqux\n")
Run Code Online (Sandbox Code Playgroud)

然而,这只会使第一部分'原始':

>>> print(s)
foo\tbar\nbaz   qux

>>>
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式传播'r'到所有相邻的文字?

Mar*_*ers 5

r前缀是所述文字符号的一部分,所得到的字符串对象不一部分.

在每一行使用它,这里没有捷径:

s = (
    r"foo\tbar\n"
    r"baz\tqux\n")
Run Code Online (Sandbox Code Playgroud)

如果你真的有很多这些并找到所有那些r繁琐的前缀,你可以使用原始的多行字符串(三重引号)并删除换行符:

s = ''.join(r"""
foo\tbar\n
baz\tqux\n
""".splitlines())
Run Code Online (Sandbox Code Playgroud)

请注意,这不会删除初始空格,因此您必须在第0列开始每一行或使用textwrap.dedent()为您删除一致的前导空格:

from textwrap import dedent

s = ''.join(dedent(r"""
    foo\tbar\n
    baz\tqux\n
""").splitlines())
Run Code Online (Sandbox Code Playgroud)

快速演示:

>>> s = (
...     r"foo\tbar\n"
...     r"baz\tqux\n")
>>> s
'foo\\tbar\\nbaz\\tqux\\n'
>>> s = ''.join(r"""
... foo\tbar\n
... baz\tqux\n
... """.splitlines())
>>> s
'foo\\tbar\\nbaz\\tqux\\n'
>>> from textwrap import dedent
>>> s = ''.join(dedent(r"""
...     foo\tbar\n
...     baz\tqux\n
... """).splitlines())
>>> s
'foo\\tbar\\nbaz\\tqux\\n'
Run Code Online (Sandbox Code Playgroud)