Bagaimana cara memasukkan kutipan dalam string Python mentah

91

Mempertimbangkan:

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

Jadi bagaimana kita mendapatkan kutipannya, tapi tidak dengan garis miring?

Dan tolong jangan menyarankan r'what"ever', karena pertanyaannya adalah bagaimana kita memasukkan kedua jenis kutipan tersebut?

Terkait

mpen
sumber
Dalam kasus penggunaan motivasi untuk string mentah (ekspresi reguler dan kasus lain di mana sesuatu selain Python menafsirkan garis miring terbalik), garis miring terbalik itu baik-baik saja, karena itu akan diproses oleh mesin regex / mesin apa pun. Ini tidak berlaku untuk semua kasus di mana Anda mungkin ingin menggunakan string mentah, tetapi pastikan untuk memikirkan apakah itu berlaku untuk kasus penggunaan Anda sebelum Anda mencoba menghilangkan garis miring terbalik.
user2357112 mendukung Monica

Jawaban:

148

Jika Anda ingin menggunakan tanda kutip ganda dalam string tetapi bukan tanda kutip tunggal, Anda dapat menggunakan tanda kutip tunggal sebagai pemisah:

r'what"ever'

Jika Anda membutuhkan kedua jenis kutipan dalam string Anda, gunakan string yang dikutip tiga kali:

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

Jika Anda ingin menyertakan kedua jenis string yang dikutip tiga kali dalam string Anda (kasus yang sangat tidak mungkin), Anda tidak dapat melakukannya, dan Anda harus menggunakan string non-mentah dengan pelolosan.

Adam Rosenfield
sumber
1
Luar biasa. Butuh waktu sedetik untuk menyadari bahwa saya juga bisa membuat string yang dikutip tiga kali lipat.
mpen
3
Saya juga suka paragraf terakhir ... inilah yang sebenarnya ingin saya pahami. Batasan gaya mengutip yang berbeda. Saya membandingkan Python r"raw string"dan C # @"@-quoted string"dan"""triple quotes"""
mpen
2
Python newb di sini, agak bingung, bukankah r'what"ever"kesalahan parse? Apakah maksud Anda r'what"ever'?
nmr
1
Apa yang salah dengan pengembang Python? Mengapa mereka tidak menerapkan sistem pelarian seperti yang dilakukan setiap bahasa lain?
Jamby
6
@Jamby Mereka memiliki sistem pelolosan, Anda hanya menggunakannya dengan string non-mentah (string tanpa r di depannya), dan ini berfungsi seperti hampir semua bahasa lainnya .
Coburn
10

Python memiliki lebih dari satu cara untuk membuat string. Sintaks string berikut akan memungkinkan Anda menggunakan tanda kutip ganda:

'''what"ever'''
Karl
sumber
1
Anda melewatkan bagian mentah dari pertanyaan itu.
mpen
10

Jika Anda memerlukan jenis kutipan apa pun (tunggal, ganda, dan tiga kali lipat untuk keduanya), Anda dapat "menggabungkan" (0) string:

>>> 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'''

Anda juga dapat "menggabungkan" (0) string mentah dengan string non-mentah:

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

(0): Faktanya, parser Python menggabungkan string, dan tidak membuat banyak string. Jika Anda menambahkan operator "+", beberapa string akan dibuat dan digabungkan.

Bakuriu
sumber
5

Tidak masalah, jawabannya adalah string kutipan tiga mentah:

r"""what"ever"""
mpen
sumber
3

Karena saya tersandung pada jawaban ini, dan itu sangat membantu saya, tetapi saya menemukan masalah sintaksis kecil, saya merasa saya harus menyelamatkan orang lain yang mungkin frustrasi. String kutip tiga berfungsi untuk skenario ini seperti yang dijelaskan, tetapi perhatikan bahwa jika "yang Anda inginkan dalam string muncul di akhir string itu sendiri:

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

Anda akan menemui kesalahan saat eksekusi karena tanda kutip "" "" (4) berturut-turut membingungkan pembaca string, karena ia mengira telah mencapai akhir string dan kemudian menemukan "acak" di luar sana. Anda dapat memvalidasi ini dengan memasukkan spasi ke dalam 4 tanda kutip seperti ini: "" "" dan tidak akan ada kesalahan.

Dalam kasus khusus ini, Anda perlu menggunakan:

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

atau gunakan metode yang dijelaskan di atas untuk membuat beberapa string dengan campuran "dan 'dan kemudian menggabungkannya setelah fakta.

charrold303
sumber
1

Hanya untuk memasukkan fungsionalitas baru yang kompatibel dengan Python f String:

var_a = 10

f"""This is my quoted variable: "{var_a}". """
illusionx
sumber
f-string mendukung pelarian, bukan? Jadi Anda bisa melakukannya f"foo\"bar".
mpen
-3

Menggunakan:

dqote='"'
sqote="'"

Gunakan operator '+' dan dqotedansquote variabel untuk mendapatkan yang Anda butuhkan.

Jika saya mau sed -e s/",u'"/",'"/g -e s/^"u'"/"'"/, Anda dapat mencoba yang berikut ini:

dqote='"'
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + '/' + dqote + sqote + dqote + '/'
zulfi123786
sumber