Entfernen Sie das letzte Zeichen, wenn es sich um einen Backslash handelt

77

Gibt es eine Funktion zum Chomp des letzten Zeichens in der Zeichenfolge, wenn es sich um ein Sonderzeichen handelt? Zum Beispiel muss ich Backslash entfernen, wenn es da ist, und nichts tun, wenn nicht. Ich weiß, dass ich es mit Regex leicht machen kann, aber ich frage mich, ob es dafür so etwas wie eine kleine eingebaute Funktion gibt.

Sergei Basharov
quelle
1
Was ist, wenn am Ende des Strings mehrere Backslashes stehen? Sie alle entfernen?
Felix Kling
1
Du hast schon gute Antworten bekommen. Wenn Ihre Frage aus der Notwendigkeit , kommt ein richtigen Dateinamen in dem Dateisystem zu erstellen, dann os.path.join ( docs.python.org/library/os.path.html#os.path.join ) kommt praktisch
van

Antworten:

131

Verwenden Sie rstripdiese Option, um die angegebenen Zeichen von der rechten Seite der Zeichenfolge zu entfernen.

my_string = my_string.rstrip('\\')

Siehe: http://docs.python.org/library/stdtypes.html#str.rstrip

FogleBird
quelle
14
... und es werden mehr als ein Zeichen entfernt, wenn am Ende der Zeichenfolge mehr als ein Backslash steht.
Tim Pietzcker
@ Tim: Guter Punkt ... Ich denke, das OP sollte klarstellen (nach meinem Verständnis sollte es alle "Sonderzeichen" entfernen).
Felix Kling
7
Wenn es darum geht, Pfadnamen zu normalisieren, ist die betriebssystemneutrale Methode die Verwendung von strip wie oben beschrieben, aber das zu entfernende Zeichen ist os.sep - das ist Backslash für Windows, Forward Slash für Unix.
Chris Johnson
19

Wenn es Ihnen nichts ausmacht, alle nachfolgenden Backslashes zu entfernen, können Sie verwenden string.rstrip()

Zum Beispiel:

x = '\\abc\\'
print x.rstrip('\\')

Drucke:

\abc

Es gibt jedoch ein kleines Problem (basierend darauf, wie Ihre Frage formuliert ist): Dadurch werden ALLE nachfolgenden Backslashes entfernt. Wenn Sie wirklich nur möchten, dass der LETZTE Charakter entfernt wird, können Sie Folgendes tun:

if x[-1] == '\\': x = x[:-1]
Adam Batkin
quelle
10

Wenn Sie bei mehreren nur einen Backslash entfernen möchten , gehen Sie wie folgt vor:

s = s[:-1] if s.endswith('\\') else s
Rob Cowie
quelle
7
if s.endswith('\\'):
    s = s[:-1]
Matt Joiner
quelle
1
Hast du das versucht? Es ist ein Syntaxfehler. Sie müssen verwendenif s.endswith('\\')
Tim Pietzcker
1
Im Ernst, ich stoße jedes Mal darauf. Was zum Teufel ist der Sinn von rohen Saiten, wenn sie nicht wie erwartet funktionieren.
Matt Joiner
6

Die Funktion rstrip entfernt jedoch mehr als nur das letzte Zeichen. Es werden alle Backslashes am Ende der Zeichenfolge entfernt. Hier ist eine einfache if-Anweisung, mit der nur das letzte Zeichen entfernt wird:

if s[-1] == '\\':
    s = s[:-1]
EdoDodo
quelle
2

Oder nicht so schön (schlag mich nicht), funktioniert aber auch:

stripSlash = lambda strVal: strVal[:-1] if strVal.endswith('\\') else strVal
stripSlash('sample string with slash\\')

Und ja - Streifen ist besser. Ich will es nur versuchen.

Artsiom Rudzenka
quelle
1

Wir können die eingebaute Funktion ersetzen verwenden

my_str.replace (my_char, '')

my_chars = '\\'    
my_str = my_str.replace(my_char,'')

Dies ersetzt alle \ in my_str

my_str.replace (my_chars, '', i)

my_char = '\\'
my_str = 'AB\CD\EF\GH\IJ\KL'
print ("Original my_str : "+ my_str)
for i in range(8):
    print ("Replace '\\' %s times" %(i))
    print("     Result : "+my_str.replace(my_chars, '',i))

Dies wird \ in my_str i- mal ersetzen. Jetzt können Sie steuern, wie oft Sie es durch i ersetzen möchten

Ausgabe:

Original my_str : AB\CD\EF\GH\IJ\KL
Replace '\' 0 times
     Result : AB\CD\EF\GH\IJ\KL
Replace '\' 1 times
     Result : ABCD\EF\GH\IJ\KL
Replace '\' 2 times
     Result : ABCDEF\GH\IJ\KL
Replace '\' 3 times
     Result : ABCDEFGH\IJ\KL
Replace '\' 4 times
     Result : ABCDEFGHIJ\KL
Replace '\' 5 times
     Result : ABCDEFGHIJKL
Replace '\' 6 times
     Result : ABCDEFGHIJKL
Replace '\' 7 times
     Result : ABCDEFGHIJKL
AnuragChauhan
quelle
0

Für C # Leute, die hier landen:

my_string = my_string.TrimEnd('\\');
Shadi Namrouti
quelle