Ich habe eine Zeichenfolge, durch die ich jedes Zeichen, das kein Standardzeichen oder keine Standardzahl ist, wie z. B. (az oder 0-9), durch ein Sternchen ersetzen möchte. Zum Beispiel wird "h ^ & ell`., | Ow] {+ orld" durch "h * ell * o * w * orld" ersetzt. Beachten Sie, dass mehrere Zeichen wie "^ &" durch ein Sternchen ersetzt werden. Wie würde ich das machen?
99
Antworten:
Regex zur Rettung!
Beispiel:
quelle
re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")
import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
\W
ist auch für Nicht-Wort-Zeichen, es ist fast das gleiche, erlaubt aber den Unterstrich als Wort-Zeichen (weiß nicht warum): docs.python.org/3.6/library/re.html#index-32Der pythonische Weg.
Dies betrifft jedoch nicht das Gruppieren mehrerer aufeinanderfolgender nicht übereinstimmender Zeichen, d. H.
"h^&i => "h**i
nicht"h*i"
wie bei den Regex-Lösungen.quelle
Versuchen:
in Python3:
Bearbeiten: erkannte, dass das OP Nicht-Zeichen durch '*' ersetzen möchte. Meine Antwort passt nicht
quelle
Verwenden Sie,
\W
was äquivalent zu ist[^a-zA-Z0-9_]
. Überprüfen Sie die Dokumentation unter https://docs.python.org/2/library/re.htmlUpdate: Diese Lösung schließt auch Unterstriche aus. Wenn Sie möchten, dass nur Alphabete und Zahlen ausgeschlossen werden, ist eine Lösung von nneonneo besser geeignet.
quelle
\W
dies[^a-zA-Z0-9_]
nur in Python 2.x entspricht . In Python 3.x\W+
entspricht dies[^a-zA-Z0-9_]
nur, wennre.ASCII
/re.A
flag verwendet wird.