So fügen Sie ein Zitat in eine rohe Python-Zeichenfolge ein

85

Erwägen:

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

Wie bekommen wir also das Zitat, aber nicht den Schrägstrich?

Und bitte schlagen Sie nicht vor r'what"ever', denn dann stellt sich die Frage, wie wir beide Arten von Zitaten aufnehmen.

verbunden

mpen
quelle
In dem motivierenden Anwendungsfall für rohe Zeichenfolgen (Regexes und andere Fälle, in denen etwas anderes als Python die Backslashes interpretiert) ist der Backslash in Ordnung, da er von der Regex-Engine / welcher Engine auch immer verarbeitet wird. Dies gilt nicht für alle Fälle, in denen Sie möglicherweise rohe Zeichenfolgen verwenden möchten. Überlegen Sie jedoch, ob dies für Ihren Anwendungsfall gilt, bevor Sie versuchen, die Backslashes zu entfernen.
user2357112 unterstützt Monica

Antworten:

142

Wenn Sie doppelte Anführungszeichen in Zeichenfolgen, aber keine einfachen Anführungszeichen verwenden möchten, können Sie stattdessen einfach einfache Anführungszeichen als Trennzeichen verwenden:

r'what"ever'

Wenn Sie beide Arten von Anführungszeichen in Ihrer Zeichenfolge benötigen, verwenden Sie eine Zeichenfolge in dreifachen Anführungszeichen:

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

Wenn Sie beide Arten von Zeichenfolgen in dreifachen Anführungszeichen in Ihre Zeichenfolge aufnehmen möchten (ein äußerst unwahrscheinlicher Fall), können Sie dies nicht tun, und Sie müssen nicht rohe Zeichenfolgen mit Escapezeichen verwenden.

Adam Rosenfield
quelle
1
Ausgezeichnet. Ich brauchte eine Sekunde, um zu erkennen, dass ich auch dreifach zitierte Zeichenfolgen roh machen konnte.
Mpen
3
Ich mag auch den letzten Absatz ... genau das wollte ich herausfinden. Die Einschränkungen verschiedener Anführungszeichenstile. Ich vergleiche Pythons r"raw string"und C # @"@-quoted string"und"""triple quotes"""
mpen
2
Python-Neuling hier, etwas verwirrt, ist das kein Analysefehler r'what"ever"? Meinten Sie r'what"ever'?
nmr
1
Was ist los mit Python-Entwicklern? Warum haben sie nicht einfach ein Fluchtsystem implementiert, wie es alle anderen Sprachen tun?
Jamby
6
@ Jamby Sie haben ein Escape-System, Sie verwenden es nur mit nicht rohen Zeichenfolgen (Zeichenfolgen ohne das r vor ihnen) und es funktioniert wie so ziemlich jede andere Sprache .
Coburn
10

Python hat mehr als eine Möglichkeit, Zeichenfolgen zu erstellen. Mit der folgenden Zeichenfolgensyntax können Sie doppelte Anführungszeichen verwenden:

'''what"ever'''
Karl
quelle
Sie haben den rohen Teil der Frage verpasst .
Mpen
10

Wenn Sie eine Art von Anführungszeichen benötigen (einfach, doppelt und dreifach für beide), können Sie die Zeichenfolgen "kombinieren" (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'''

Sie können auch (0) Rohzeichenfolgen mit Nicht-Rohzeichenfolgen "kombinieren":

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

(0): Tatsächlich verbindet der Python-Parser die Zeichenfolgen und erstellt nicht mehrere Zeichenfolgen. Wenn Sie den Operator "+" hinzufügen, werden mehrere Zeichenfolgen erstellt und kombiniert.

Bakuriu
quelle
4

Egal, die Antwort sind rohe dreifach zitierte Zeichenfolgen:

r"""what"ever"""
mpen
quelle
3

Da ich über diese Antwort gestolpert bin und sie mir sehr geholfen hat, aber ich ein kleines syntaktisches Problem gefunden habe, hatte ich das Gefühl, ich sollte anderen mögliche Frustrationen ersparen. Die dreifach in Anführungszeichen gesetzte Zeichenfolge funktioniert für dieses Szenario wie beschrieben. Beachten Sie jedoch, dass, wenn das gewünschte Zeichen in der Zeichenfolge am Ende der Zeichenfolge selbst steht:

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

Bei der Ausführung wird ein Fehler angezeigt, da die Anführungszeichen "" "(4) in einer Zeile den Zeichenfolgenleser verwirren, da er denkt, dass er das Ende der Zeichenfolge bereits erreicht hat, und dann ein zufälliges" da draußen "findet. Sie können dies überprüfen durch Einfügen eines Leerzeichens in die 4 Anführungszeichen wie folgt: "" "" und es wird nicht den Fehler haben.

In diesem speziellen Fall müssen Sie entweder Folgendes verwenden:

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

oder verwenden Sie die oben beschriebene Methode, um mehrere Zeichenfolgen mit gemischten "und" zu erstellen und sie anschließend zu verketten.

charrold303
quelle
1

Nur um neue Python f String-kompatible Funktionen aufzunehmen:

var_a = 10

f"""This is my quoted variable: "{var_a}". """
illusionx
quelle
F-Strings unterstützen das Entkommen, nicht wahr? So können Sie tun f"foo\"bar".
Mpen
-3

Verwenden:

dqote='"'
sqote="'"

Verwenden Sie den Operator '+' und dqoteundsquote Variablen , um das zu erhalten, was Sie benötigen.

Wenn ich möchte sed -e s/",u'"/",'"/g -e s/^"u'"/"'"/, können Sie Folgendes versuchen:

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