Antworten:
Wenn Sie nicht davon ausgehen können, dass alle von Ihnen verarbeiteten Zeichenfolgen doppelte Anführungszeichen haben, können Sie Folgendes verwenden:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
Bearbeiten:
Ich bin sicher, dass Sie hier nur string
als Variablennamen zur Veranschaulichung verwendet haben und in Ihrem realen Code einen nützlichen Namen haben, aber ich fühle mich verpflichtet, Sie zu warnen, dass string
in den Standardbibliotheken ein Modul benannt ist . Es wird nicht automatisch geladen, aber wenn Sie es jemals verwenden, import string
stellen Sie sicher, dass Ihre Variable es nicht verdunkelt.
So entfernen Sie das erste und das letzte Zeichen und entfernen es jeweils nur, wenn es sich bei dem betreffenden Zeichen um ein doppeltes Anführungszeichen handelt:
import re
s = re.sub(r'^"|"$', '', s)
Beachten Sie, dass sich das RE-Muster von dem von Ihnen angegebenen unterscheidet und die Operation sub
("Ersatz") mit einer leeren Ersatzzeichenfolge ist ( strip
eine Zeichenfolgenmethode, die sich jedoch von Ihren Anforderungen unterscheidet, wie andere Antworten angegeben haben).
startsWith
.
WICHTIG: Ich erweitere die Frage / Antwort, um einfache oder doppelte Anführungszeichen zu entfernen. Und ich interpretiere die Frage so, dass BEIDE Zitate vorhanden und übereinstimmend sein müssen, um den Streifen auszuführen. Andernfalls wird die Zeichenfolge unverändert zurückgegeben.
Um eine Zeichenfolgendarstellung zu "dequoteieren", die entweder einfache oder doppelte Anführungszeichen enthält (dies ist eine Erweiterung der Antwort von @ tgray):
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
kann ein Tupel nehmen, um eine von mehreren Alternativen zu finden. Der Grund für die DOPPELTEN Klammern ((
und ))
ist, dass wir EINEN Parameter ("'", '"')
an übergeben startswith()
, um die zulässigen Präfixe anstelle von ZWEI Parametern anzugeben, "'"
und '"'
die als Präfix und (ungültige) Startposition interpretiert würden.
s[-1]
ist das letzte Zeichen in der Zeichenfolge.
Testen:
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 sind Regex-Ausdrücke nicht offensichtlich zu lesen, daher habe ich nicht versucht, die Antwort von @ Alex zu erweitern.)
len(s) >= 2
oder ähnliches hinzufügen .
Fast fertig. Zitieren von http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip
Das Argument chars ist eine Zeichenfolge, die den zu entfernenden Zeichensatz angibt.
[...]
Das Argument chars ist kein Präfix oder Suffix. Vielmehr werden alle Kombinationen seiner Werte entfernt:
Das Argument ist also kein regulärer Ausdruck.
>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>
Beachten Sie, dass dies nicht genau das ist, was Sie angefordert haben, da es mehrere Anführungszeichen von beiden Enden der Zeichenfolge frisst!
Ich habe einen Code, der einfache oder doppelte Anführungszeichen entfernen muss, und ich kann ihn nicht einfach ast.literal_eval.
if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
arg = arg[1:-1]
Dies ähnelt der Antwort von ToolmakerSteve, erlaubt jedoch Zeichenfolgen mit einer Länge von 0 und verwandelt das einzelne Zeichen nicht "
in eine leere Zeichenfolge.
In Ihrem Beispiel könnten Sie Streifen verwenden, aber Sie müssen den Platz bereitstellen
string = '"" " " ""\\1" " "" ""'
string.strip('" ') # output '\\1'
Beachten Sie, dass das \ 'in der Ausgabe die Standard-Python-Anführungszeichen für die Zeichenfolgenausgabe sind
Der Wert Ihrer Variablen ist '\\ 1'.
Die folgende Funktion entfernt die leeren Leerzeichen und gibt die Zeichenfolgen ohne Anführungszeichen zurück. Wenn keine Anführungszeichen vorhanden sind, wird dieselbe Zeichenfolge zurückgegeben (entfernt).
def removeQuote(str):
str = str.strip()
if re.search("^[\'\"].*[\'\"]$",str):
str = str[1:-1]
print("Removed Quotes",str)
else:
print("Same String",str)
return str
Ab Python 3.9
können Sie verwenden removeprefix
und removesuffix
:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip
, beachten Sie bitte , dass a) diese Methode nicht einen regulären Ausdruck als Argument übernimmt, b) die regex Sie geliefert würde sowieso und c nicht gearbeitet haben) diese Methode entfernt alle benachbarten Zeichen, nicht nur eine, so Sie hätten zwei doppelte Anführungszeichen mit verloren.strip('"')
.