Ich muss alle Sonderzeichen, Satzzeichen und Leerzeichen aus einer Zeichenkette entfernen, so dass ich nur Buchstaben und Zahlen habe.
Antworten
Zu viele Anzeigen?#!/usr/bin/python
import re
strs = "how much for the maple syrup? $20.99? That's ricidulous!!!"
print strs
nstr = re.sub(r'[?|$|.|!]',r'',strs)
print nstr
nestr = re.sub(r'[^a-zA-Z0-9 ]',r'',nstr)
print nestr
Sie können weitere Sonderzeichen hinzufügen, die dann durch '' ersetzt werden, was nichts bedeutet, d.h. sie werden entfernt.
String.punctuation enthält folgende Zeichen:
'!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'
Sie können die Funktionen translate und maketrans verwenden, um Zeichensetzungen auf leere Werte abzubilden (replace)
import string
'This, is. A test!'.translate(str.maketrans('', '', string.punctuation))
Ausgabe:
'This is A test'
Anders als alle anderen, die Regex verwenden, würde ich versuchen, jedes Zeichen auszuschließen, das ist nicht was ich will, anstatt ausdrücklich aufzuzählen, was ich nicht will.
Wenn ich z. B. nur Buchstaben von "a bis z" (Groß- und Kleinbuchstaben) und Zahlen möchte, würde ich alles andere ausschließen:
import re
s = re.sub(r"[^a-zA-Z0-9]","",s)
Das bedeutet: "Ersetzen Sie jedes Zeichen, das keine Zahl oder ein Zeichen im Bereich 'a bis z' oder 'A bis Z' ist, durch eine leere Zeichenfolge".
In der Tat, wenn Sie das Sonderzeichen ^
an der ersten Stelle Ihrer Regex, erhalten Sie die Negation.
Extra-Tipp: Wenn Sie auch Kleinbuchstaben das Ergebnis, können Sie die Regex noch schneller und einfacher machen, solange Sie keine Großbuchstaben mehr finden.
import re
s = re.sub(r"[^a-z0-9]","",s.lower())
Angenommen, Sie wollen einen Regex verwenden und Sie wollen/brauchen Unicode-kompatiblen 2.x-Code, der 2to3-fähig ist:
>>> import re
>>> rx = re.compile(u'[\W_]+', re.UNICODE)
>>> data = u''.join(unichr(i) for i in range(256))
>>> rx.sub(u'', data)
u'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\xaa\xb2 [snip] \xfe\xff'
>>>