2016-06-17 9 views
4

私はこのオンラインを見つけることができませんでしたが、基本的に私はこのような文字列があります。Pythonを使って複数行の文字列を三重引用符で囲むには?

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

を、私はそうのような変数を使用しているとして、この文字列をフォーマットする必要があります。

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

私はできません文字列を使用するプログラムがそれを期待するので、三重引用符を変更してください。それ以外の場合は動作しません。

この文字列を正しく宣言/エスケープできますか?

答えて

3

あなたは、文字列のためのトリプル単一引用符を使用することができます。

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 
""" 
+1

感謝を。しかし、何らかの理由で私が使用している実際のテキストはすべての行についてタブを取得するようです。これは正常ですか?その行で新しい行に名前を追加すると、最初にタブが表示されます。私が '' 'と同じ行に入れると、これはその行には起こらないので、それは良いですが、他の行は何らかの理由でタブで始まっています。 –

+2

@JoanVenge ''' ''はすべての空白を保持します。テキストを次の行から始めると、テキストの先頭に '\ n 'が付きます。同様に、テキストを意図している場合は、空白もそこにあります。 – niemmi

+0

ありがとうございました。これは私が使用している文字列です: http://paste.ofcode.org/5uBdzf32hy5BZ7DdrRpYKE なぜ私は本当にタブを取得しているのか分かりません。私がやっているのは、使用フォーマットです。結果を印刷します。 –

1

あなたは完璧にうまく機能niemmiのアプローチ、@を使用することができます。また、あなたが次の行に継続するつもり示すために、それぞれの行の末尾にバックスラッシュを追加することができます。

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

あなたは、文字列内であなたが他を逃れることができるのと同じ方法でトリプル引用符をエスケープすることができます\と引用符文字、:

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

厳密に言えば、あなただけの"文字---現れるのトリプル"""を防止するのに十分なほどの脱出しなければならない---が、私は、電子を見つけます3つすべてを飾ると、私の意図がより明確になります。

その後...

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's answer作品をしていますが、内部'''"""トリプルクォートのミックスを持っていない場合にのみ、文字列引用符文字をバックスラッシュでエスケープする常にが動作します。

うるさ#1:改行

私はsは最後の3つのエスケープ引用符文字と実際の文字列を終了トリプル引用符の間に改行を保存していることを強調するためにダッシュの行を印刷しました。

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

うるさ#2:リテラルから削除するリテラル

の内部sリテラルの第二次の行をプリザーブドくぼみが第一(左)カラムに対して同一平面でなければなりません。きれいにインデントされたブロックの中に並んでトリプル引用符で囲まれた文字列:

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 ' 
関連する問題