Ham bir Python dizesine alıntı ekleme


91

Düşünmek:

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

Öyleyse alıntıyı nasıl elde ederiz ama eğik çizgiyi değil?

Ve lütfen önermeyin r'what"ever', çünkü o zaman soru her iki türden alıntıyı nasıl dahil ederiz?

İlişkili


Ham dizeler için motive edici kullanım durumunda (regex'ler ve Python'dan başka bir şeyin ters eğik çizgileri yorumladığı diğer durumlar), ters eğik çizgi iyidir, çünkü normal ifade motoru tarafından işlenecektir. Bu, ham dizeleri kullanmak isteyebileceğiniz tüm durumlar için geçerli değildir, ancak ters eğik çizgileri çıkarmaya çalışmadan önce kullanım durumunuz için geçerli olup olmadığını düşünün.
user2357112

Yanıtlar:


148

Dizelerde çift tırnak kullanmak istiyor ancak tek tırnak kullanmıyorsanız, bunun yerine sınırlayıcı olarak tek tırnak kullanabilirsiniz:

r'what"ever'

Dizenizde her iki türden tırnağa da ihtiyacınız varsa, üç tırnaklı bir dize kullanın:

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

Dizenize her iki türden üç tırnaklı dizgeyi dahil etmek istiyorsanız (son derece olası olmayan bir durum), bunu yapamazsınız ve kaçışlarla ham olmayan dizeler kullanmanız gerekir.


1
Mükemmel. Üç alıntılı dizeleri de ham yapabileceğimi fark etmem bir saniyemi aldı.
mpen

3
Son paragrafı da beğendim ... tam olarak anlamaya çalıştığım şey buydu. Farklı alıntı stillerinin sınırlamaları. Python r"raw string"ve C # 'ları karşılaştırıyorum @"@-quoted string"ve"""triple quotes"""
mpen

2
Python newb burada biraz karışık, r'what"ever"ayrıştırma hatası değil mi? Şunu mu demek istediniz r'what"ever'?
nmr

1
Python geliştiricilerinin nesi var? Neden diğer dillerin yaptığı gibi bir kaçış sistemi uygulamadılar?
Jamby

6
@Jamby Bir kaçış sistemleri var, onu sadece ham olmayan dizgelerle (önlerinde r harfi olmayan dizeler) kullanıyorsunuz ve hemen hemen her dil gibi çalışıyor .
Coburn

10

Python'da dizeleri yapmanın birden fazla yolu vardır. Aşağıdaki dize sözdizimi, çift tırnak kullanmanıza izin verir:

'''what"ever'''

1
Sorunun işlenmemiş kısmını kaçırdınız .
mpen

10

Herhangi bir alıntı türüne ihtiyacınız varsa (her ikisi için tekli, çiftli ve üçlü) dizeleri "birleştirebilirsiniz" (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'''

Ayrıca (0) ham dizeleri ham olmayan dizelerle "birleştirebilirsiniz":

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

(0): Aslında, Python ayrıştırıcısı dizeleri birleştirir ve birden çok dizge oluşturmaz. "+" Operatörünü eklerseniz, birden çok dize oluşturulur ve birleştirilir.


5

Boşver, cevap ham üç tırnaklı dizelerdir:

r"""what"ever"""

3

Bu yanıta tökezlediğimden ve bana çok yardımcı olduğu için, ancak küçük bir sözdizimsel sorun bulduğum için, başkalarını olası hayal kırıklıklarından kurtarmam gerektiğini hissettim. Üç tırnaklı dize, bu senaryo için açıklandığı gibi çalışır, ancak dizede "istediğiniz" ifadesi dizenin kendisinin sonunda yer alırsa:

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

Bir satırdaki "" "" (4) tırnak işaretleri, dizenin sonuna geldiğini düşündüğü ve orada rastgele bir "" bulduğu için dize okuyucunun kafasını karıştırdığı için yürütme sırasında bir hatayla karşılaşırsınız. Bunu doğrulayabilirsiniz. 4 tırnak içine şöyle bir boşluk ekleyerek: "" "" hata vermez.

Bu özel durumda aşağıdakilerden birini kullanmanız gerekecektir:

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

veya yukarıda açıklanan yöntemi kullanarak birden çok dizeyi karma "ve" ile oluşturma ve ardından bunları gerçeğe göre birleştirme.


1

Sadece yeni Python f String uyumlu işlevselliği eklemek için:

var_a = 10

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

f-dizeleri kaçmayı destekler, değil mi? Yani yapabilirsin f"foo\"bar".
mpen

-3

Kullanım:

dqote='"'
sqote="'"

'+' Operatörünü kullanın ve dqotevesquoteİhtiyacınız olanı elde etmek için değişkenleri kullanın.

İstersem sed -e s/",u'"/",'"/g -e s/^"u'"/"'"/şunları deneyebilirsiniz:

dqote='"'
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + '/' + dqote + sqote + dqote + '/'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.