Ich muss alle Sonderzeichen, Satzzeichen und Leerzeichen aus einer Zeichenkette entfernen, so dass ich nur Buchstaben und Zahlen habe.
Antworten
Zu viele Anzeigen?Dies kann auch ohne Regex geschehen:
>>> string = "Special $#! characters spaces 888323"
>>> ''.join(e for e in string if e.isalnum())
'Specialcharactersspaces888323'
Sie können verwenden str.isalnum
:
S.isalnum() -> bool Return True if all characters in S are alphanumeric and there is at least one character in S, False otherwise.
Wenn Sie darauf bestehen, Regex zu verwenden, sind andere Lösungen ausreichend. Beachten Sie jedoch, dass, wenn es ohne die Verwendung eines regulären Ausdrucks möglich ist, dies der beste Weg ist, um es zu tun.
TLDR
Ich habe die vorgegebenen Antworten zeitlich eingegrenzt.
import re
re.sub('\W+','', string)
ist typischerweise 3x schneller als die nächstschnellere Top-Antwort.
Bei der Verwendung dieser Option ist Vorsicht geboten. Einige Sonderzeichen (z. B. ø ) dürfen mit dieser Methode nicht gestreift werden.
Nachdem ich dies gesehen hatte, war ich daran interessiert, die gegebenen Antworten zu erweitern, indem ich herausfand, welche davon in der kürzesten Zeit ausgeführt werden, also ging ich durch und prüfte einige der vorgeschlagenen Antworten mit timeit
gegen zwei der Beispielzeichenketten:
string1 = 'Special $#! characters spaces 888323'
string2 = 'how much for the maple syrup? $20.99? That s ridiculous!!!'
Beispiel 1
'.join(e for e in string if e.isalnum())
string1
- Ergebnis: 10.7061979771string2
- Ergebnis: 7.78372597694
Beispiel 2
import re
re.sub('[^A-Za-z0-9]+', '', string)
string1
- Ergebnis: 7.10785102844string2
- Ergebnis: 4.12814903259
Beispiel 3
import re
re.sub('\W+','', string)
string1
- Ergebnis: 3.11899876595string2
- Ergebnis: 2,78014397621
Die obigen Ergebnisse sind ein Produkt aus dem niedrigsten zurückgegebenen Ergebnis und einem Durchschnitt von: repeat(3, 2000000)
Beispiel 3 kann 3x schneller sein als Beispiel 1 .
Python 2.*
Ich denke, gerade filter(str.isalnum, string)
Werke
In [20]: filter(str.isalnum, 'string with special chars like !,#$% etcs.')
Out[20]: 'stringwithspecialcharslikeetcs'
Python 3.*
In Python3, filter( )
Funktion würde ein itertable-Objekt zurückgeben (statt eines Strings wie oben). Um eine Zeichenkette aus itertable zu erhalten, muss man eine Verbindung herstellen:
''.join(filter(str.isalnum, string))
oder zu passieren list
bei gemeinsamer Nutzung ( nicht sicher, kann aber etwas schnell sein )
''.join([*filter(str.isalnum, string)])
Hinweis: Auspacken in [*args]
gültig ab Python >= 3.5
- See previous answers
- Weitere Antworten anzeigen