2010-06-21 5 views
71

Streifen I doppelte Anführungszeichen vonPython Wie kann ich erste und letzte doppelte Anführungszeichen

string = '"" " " ""\\1" " "" ""' 

werden

string = '" " " ""\\1" " "" "' 

Ich habe versucht, verwenden rstrip, lstrip und strip('[^\"]|[\"$]') abzustreifen wollen, aber es hat nicht funktioniert .

Wie kann ich das tun? Vielen Dank für Ihre Hilfe.

+5

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. –

Antwort

130

Wenn die Anführungszeichen Sie entfernen lassen möchten immer „erste und letzte“ sein würde, wie Sie gesagt haben, dann könnte man einfach nutzen:

string = string[1:-1]

+0

Die folgende ist sicherer! –

7

Wenn Zeichenfolge ist immer, wie Sie zeigen:

string[1:-1] 
2

Wenn Sie sind sicher, dass es ein "am Anfang und am Ende ist, das Sie entfernen möchten, gerade tun:

string = string[1:len(string)-1] 

oder

string = string[1:-1] 
73

Wenn man nicht davon ausgehen kann, dass alle Strings Sie doppelte Anführungszeichen haben verarbeiten Sie so etwas wie diese verwenden:

if string.startswith('"') and string.endswith('"'): 
    string = string[1:-1] 

Edit:

I‘ Ich bin sicher, dass Sie gerade string als Variablenname für Beispiel hier verwendet haben und in Ihrem echten Code hat es einen nützlichen Namen, aber ich fühle mich verpflichtet, Sie zu warnen, dass es ein Modul mit dem Namengibtin den Standardbibliotheken. Es wird nicht automatisch geladen, aber wenn Sie jemals import string verwenden, stellen Sie sicher, dass Ihre Variable es nicht verdunkelt.

+0

Wenn string' '' ist (nur ein Doppelzitat), wird das einzelne Zeichen entfernt. Ich denke, das ist wahrscheinlich nicht das, was gewünscht wird, wahrscheinlich wollte Walapa nur das doppelte Zitat entfernen, wenn es übereinstimmte. – dbn

38

Um die erste und letzte Zeichen, und in jedem Fall tun, um die Entfernung nur dann, wenn das fragliche Zeichen zu entfernen ein doppeltes Anführungszeichen ist:

import re 

s = re.sub(r'^"|"$', '', s) 

Beachten Sie, dass die RE-Muster als das andere ist dir gegeben hatte, , und die Operation ist sub ("substitute") mit einer leeren Ersetzungszeichenfolge (strip ist eine String-Methode, tut aber etwas ziemlich anders als Ihre Anforderungen, wie andere Antworten angegeben haben).

+3

Mit einem RE hier ist Overkill IMHO. Ich bevorzuge die Lösung mit 'startsWith'. – pihentagy

+16

Viele Pythonistas haben ähnliche Reaktionen auf REs, die wirklich ungerechtfertigt sind - REs sind ziemlich schnell. Plus, die Lösung, die Sie "bevorzugen", wie gepostet, macht etwas völlig anderes (entfernt erstes und letztes Zeichen nur, wenn ** beide ** Anführungszeichen sind - was sich von den OP-Spezifikationen unterscheidet) - wenn führende und nachfolgende Anführungszeichen (wenn vorhanden) muss unabhängig entfernt werden, diese Lösung wird ein 4-Statements, 2-Conditionals-Block - jetzt ** das ** Overkill im Vergleich zu einem einzigen, schneller Ausdruck für den gleichen Job! -) –

0

die Position der ersten finden und die letzten "in der Zeichenfolge

>>> s = '"" " " ""\\1" " "" ""' 
>>> l = s.find('"') 
>>> r = s.rfind('"') 

>>> s[l+1:r] 
'" " " ""\\1" " "" "' 
8

Fast fertig. Von http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip

Das Zeichen Argumente Zitiert ist ein String den Satz von Zeichen spezifiziert zu sein entfernt

[...]]

Das Zeichen Argument ist kein Präfix oder Suffix; stattdessen sind alle Kombinationen von seine Werte entfernt:

Also ist das Argument keine Regexp.

>>> string = '"" " " ""\\1" " "" ""' 
>>> string.strip('"') 
' " " ""\\1" " "" ' 
>>> 

Beachten Sie, dass dies nicht genau das, was Sie aufgefordert, weil es mehrere Angebote aus den beiden Enden der Schnur isst!

+0

Perfekt dient meine Zweck! Danke vielmals. –

35

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.)

+1

Wenn Sie zuerst prüfen, ob die ersten und letzten Zeichen identisch sind, müssen Sie nur prüfen, ob das erste Zeichen ein Zitat ist: def strip_if_quoted (Name): wenn Name [0] == Name [-1] und name [0] in ("'",' "'): return name [1: -1] – TomOnTime

+0

@TomOnTime: Sie haben recht, das ist eine gute Optimierung Ich habe es angewendet – ToolmakerSteve

+3

Ich würde die Handhabung von Strings empfehlen das sind 2 Zeichen oder weniger.Im Moment kann diese Funktion einen Index außerhalb der Grenzenausnahme für eine Zeichenkette mit der Länge 0 auslösen.Zusätzlich können Sie ein Zitat von einer Zeichenkette entfernen, die 1 Zeichen lang ist.Sie ​​könnten eine Wache, 'len, hinzufügen (s)> = 2', oder etwas Ähnliches – BrennanR

0

Ich habe etwas Code, der einzelne oder doppelte Anführungszeichen streichen muss, und ich kann nicht einfach .literal_eval es.

if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]: 
    arg = arg[1:-1] 

Dies ist ähnlich ToolmakerSteve Antwort, aber es erlaubt 0 Zeichenfolge, und schaltet nicht das einzelne Zeichen " in einen leeren String.

0

in Ihrem Beispiel könnten Sie Streifen verwenden, aber Sie haben den Raum zu schaffen

string = '"" " " ""\\1" " "" ""' 
string.strip('" ') # output '\\1' 

Anmerkung der \‘in der Ausgabe ist die Standard-Python-Angebote für String-Ausgabe

der Wert Ihrer Variable '\\ 1'

-1

Die untere Funktion entfernt die leeren Spaces und gibt die Strings ohne Anführungszeichen zurück.Wenn keine Anführungszeichen vorhanden sind, wird dieselbe Zeichenfolge zurückgegeben (gestrippt)

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 
Verwandte Themen