408 Stimmen

Alle Sonderzeichen, Satzzeichen und Leerzeichen aus der Zeichenkette entfernen

Ich muss alle Sonderzeichen, Satzzeichen und Leerzeichen aus einer Zeichenkette entfernen, so dass ich nur Buchstaben und Zahlen habe.

27voto

pkm Punkte 2575
#!/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.

20voto

Vlad Bezden Punkte 71128

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'

19voto

Andrea Punkte 3759

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

15voto

sneha Punkte 699
s = re.sub(r"[-()\"#/@;:<>{}`+=~|.!?,]", "", s)

10voto

John Machin Punkte 78125

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'
>>>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X