WICHTIG: Ich erweitere die Frage/Antwort, um einzelne oder doppelte Anführungszeichen zu entfernen. Und ich interpretiere die Frage so, dass BEIDE Anführungszeichen vorhanden sein müssen, um den Streifen auszuführen. Andernfalls wird die Zeichenfolge unverändert zurückgegeben.
To "dequote" eine String-Darstellung, das könnte entweder einfache oder doppelte Anführungszeichen um ihn herum hat (dies eine Erweiterung der @ tgray Antwort ist):
def dequote(s):
"""
If a string has single or double quotes around it, remove them.
Make sure the pair of quotes match.
If a matching pair of quotes is not found, return the string unchanged.
"""
if (s[0] == s[-1]) and s.startswith(("'", '"')):
return s[1:-1]
return s
Erläuterung:
startswith
a nehmen Tupel, um mit einer von mehreren Alternativen übereinzustimmen. Der Grund für die DOUBLED-Klammern ((
und ))
ist so, dass wir EINEN Parameter ("'", '"')
an startswith()
übergeben, um die zulässigen Präfixe anstelle der TWO-Parameter "'"
und '"'
anzugeben, die als Präfix und als (ungültige) Startposition interpretiert werden.
s[-1]
ist das letzte Zeichen in der Zeichenfolge.
Testing:
print(dequote("\"he\"l'lo\""))
print(dequote("'he\"l'lo'"))
print(dequote("he\"l'lo"))
print(dequote("'he\"l'lo\""))
=>
he"l'lo
he"l'lo
he"l'lo
'he"l'lo"
(Für mich Regex Ausdrücke sind nicht offensichtlich zu lesen, so dass ich versuchte nicht, @ Alex Antwort zu erweitern.)
Die richtigen Antworten finden Sie weiter unten. Was Ihre Vorgehensweise mit 'strip' betrifft, beachten Sie bitte, dass a) diese Methode keine regex als Argument verwendet, b) die von Ihnen bereitgestellte regex hätte sowieso nicht funktioniert und c) diese Methode entfernt alle angrenzenden Zeichen, nicht nur eine, also hätten Sie zwei doppelte Anführungszeichen mit '.strip ('' ')' verloren. –