生のPython文字列に引用符を含める方法


89

考えてみましょう:

>>> r"what"ever"
SyntaxError: invalid syntax
>>> r"what\"ever"
'what\\"ever'

では、どのようにして見積もりを取得しますが、スラッシュは取得しませんか?

そしてr'what"ever'、提案しないでください。問題は、両方のタイプの引用符をどのように含めるかということになるからです。

関連


生の文字列のやる気を起こさせるユースケース(正規表現や、Python以外のものがバックスラッシュを解釈するその他のケース)では、バックスラッシュは正規表現エンジン/その他のエンジンによって処理されるため、問題ありません。これは、生の文字列を使用する可能性のあるすべてのケースに当てはまるわけではありませんが、バックスラッシュを削除する前に、ユースケースに当てはまるかどうかを必ず検討してください。
user2357112は、2018

回答:


146

文字列で二重引用符を使用し、一重引用符は使用しない場合は、代わりに一重引用符を区切り文字として使用できます。

r'what"ever'

文字列に両方の種類の引用符が必要な場合は、三重引用符で囲まれた文字列を使用します。

r"""what"ev'er"""

両方の種類の三重引用符で囲まれた文字列を文字列に含めたい場合(非常にまれなケース)、それを行うことはできず、エスケープ付きの非生文字列を使用する必要があります。


1
優秀な。トリプルクォートされた文字列も生で作成できることに気づきました。
mpen 2011年

3
私も最後の段落が好きです...これはまさに私が理解しようとしていたことでした。さまざまな引用スタイルの制限。私は、Pythonの比較だr"raw string"とC#の@"@-quoted string""""triple quotes"""
MPEN

2
ここのPythonnewbは少し混乱していますがr'what"ever"、解析エラーではありませんか?意味r'what"ever'ですか?
nmr 2014

1
Python開発者の何が問題になっていますか?他のすべての言語のように、単にエスケープシステムを実装しなかったのはなぜですか?
Jamby 2016

6
@Jambyエスケープシステムがあり、生ではない文字列(前にrがない文字列)で使用するだけで、他のほとんどすべての言語と同じように機能します
コバーン2016年

10

Pythonには、文字列を実行する方法が複数あります。次の文字列構文では、二重引用符を使用できます。

'''what"ever'''

あなたは質問の生の部分を逃しました。
mpen 2011年

10

任意のタイプの引用符(両方にシングル、ダブル、トリプル)が必要な場合は、文字列を「結合」(0)できます。

>>> raw_string_with_quotes = r'double"' r"single'" r'''double triple""" ''' r"""single triple''' """
>>> print raw_string_with_quotes
double"single'double triple""" single triple'''

生の文字列を非生の文字列と「結合」(0)することもできます。

>>> r'raw_string\n' 'non-raw string\n'
'raw_string\\nnon-raw string\n'

(0):実際、Pythonパーサーは文字列を結合し、複数の文字列を作成しません。「+」演算子を追加すると、複数の文字列が作成されて結合されます。


5

気にしないでください、答えは生のトリプルクォート文字列です:

r"""what"ever"""

3

私はこの答えに出くわし、それは私を大いに助けましたが、マイナーな構文上の問題を見つけたので、私は他の人の可能な欲求不満を救うべきだと感じました。トリプルクォートされた文字列は、説明されているようにこのシナリオで機能しますが、文字列に必要な「が文字列自体の最後にある場合は、次の点に注意してください。

somestr = """This is a string with a special need to have a " in it at the end""""

行の "" ""(4)引用符は、すでに文字列の終わりに到達していると見なし、ランダムな "を見つけるため、文字列リーダーを混乱させるため、実行時にエラーが発生します。これを検証できます。 "" ""のように4つの引用符にスペースを挿入すると、エラーは発生しません。

この特別なケースでは、次のいずれかを使用する必要があります。

somestr = 'This.....at the end"'

または、「」と「」が混在する複数の文字列を作成し、事後にそれらを連結する上記の方法を使用します。


1

新しいPythonf String互換機能を含めるだけです:

var_a = 10

f"""This is my quoted variable: "{var_a}". """

f-stringsはエスケープをサポートしていますね。だからあなたはすることができますf"foo\"bar"
MPEN

-3

使用する:

dqote='"'
sqote="'"

'+'演算子とdqoteおよびを使用しますsquote変数を必要なものを取得します。

必要に応じてsed -e s/",u'"/",'"/g -e s/^"u'"/"'"/、次のことを試すことができます。

dqote='"'
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + '/' + dqote + sqote + dqote + '/'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.