簡體   English   中英

如何使用 Python 格式化帶有三重引號的多行字符串?

[英]How to format a multi line string with triple quotes inside using Python?

我在網上找不到這個,但基本上我有一個這樣的字符串:

s = "name={0},
address={1},
nickname={2},
age={3},
comments=
"""
{4}
"""
"

我需要使用像這樣的變量來格式化這個字符串:

s.format("alice", "N/A", "alice", 18, "missing person")

我無法更改那里的三重引號,因為將使用我的字符串的程序需要這樣,否則將無法工作。

如何正確聲明/轉義此字符串?

您可以為字符串使用三重單引號:

s = '''name={0},
address={1},
nickname={2},
age={3},
comments=
"""
{4}
"""
'''

print s.format("alice", "N/A", "alice", 18, "missing person")

輸出:

name=alice,
address=N/A,
nickname=alice,
age=18,
comments=
"""
missing person
"""

您可以使用\\來轉義字符串中的三引號,就像轉義任何其他引號字符一樣:

s = """name={0},
address={1},
nickname={2},
age={3},
comments=
\"\"\"
{4}
\"\"\"
"""

嚴格來說,你只需要逃脫其中一個 "角色 - 足以防止三重"""出現 - 但我發現逃避這三個讓我的意圖更清晰。

后來...

sf = s.format("alice", "N/A", "alice", 18, "missing person")
print(sf)
print('----')
print(repr(sf))

...生產:

name=alice,
address=N/A,
nickname=alice,
age=18,
comments=
"""
missing person
"""

----
'name=alice,\naddress=N/A,\nnickname=alice,\nage=18,\ncomments=\n"""\nmissing person\n"""\n'

niemmi的答案有效,但前提是你沒有在字符串中混合使用'''"""三重引號”。使用反斜杠轉義引號字符總是有效的。

煩惱#1:尾隨換行符

我打印了一行破折號以突出顯示s保留了最后三個轉義引號字符和實際結束字符串的三重引號之間的換行符。 要從文字中刪除它:

s = """[as before...]
\"\"\"
{4}
\"\"\""""

煩惱#2:文字中保留的縮進

s literal的第二行和后續行必須與第一(左)列齊平。 三引號字符串整齊地排列在縮進塊內:

def indents_appear_in_string_literal():
    # This looks good but doesn't work right.
    s = """name={0},
    address={1},
    nickname={2},
    age={3},
    comments=
    \"\"\"
    {4}
    \"\"\"
    """
    sf = s.format("alice", "N/A", "alice", 18, "missing person")
    print(sf)
    print('----')
    print(repr(sf))
    return

...將保留字面內的縮進:

name=alice,
    address=N/A,
    nickname=alice,
    age=18,
    comments=
    """
    missing person
    """

----
'name=alice,\n    address=N/A,\n    nickname=alice,\n    age=18,\n    comments=\n    """\n    missing person\n    """\n    '

您可以使用@ niemmi的方法,它非常有效。 您還可以在每行的末尾添加反斜杠,以表示您將繼續下一行:

s = 'name={0},\
address={1},\
nickname={2},\
age={3},\
comments=\
"""\
{4}\
"""\
'

只是對於你不知道的情況,今天你可以加前綴f""" ... """

所以:

vs = ["alice", "N/A", "alice", 18, "missing person"]
s = f"""name={vs[0]},
address={vs[1]},
nickname={vs[2]},
age={vs[3]},
comments=
\"\"\"
{vs[4]}
\"\"\"
"""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM