Hi,
ich suche eine Möglichkeit alle Sonderzeichens eines Strings zu entfernen,
ähnlich wie preg_replace in php!
aus str = Das & Dies is das 4. beste der 3. Welt!
soll werden = Das Dies is das 4 beste der 3 Welt
hat jemand da einen Tipp für mich?
Wäre natürlich noch besser wenn ich wie bei preg_replace genau definieren kann was entfernt wird.
gruß
Christian
p.s.
danke schon mal im voraus!
Alle Sonderzeichen entfernen
@Quitte: Schau Dir mal die `translate()`-Methode auf Zeichenketten an. Und falls die nicht reicht, das `re`-Modul.
transalte reicht glaube ich nicht!
Wenn ich das richtige sehe ist das nur ne geschickte art des replace!
Ich möchte alle sonderzeichen entfernen,
leider habe ich keine liste aller sonderzeichen!
re sieht aber gut aus, ich denke so was habe ich gesucht.
danke
Wenn ich das richtige sehe ist das nur ne geschickte art des replace!
Ich möchte alle sonderzeichen entfernen,
leider habe ich keine liste aller sonderzeichen!
re sieht aber gut aus, ich denke so was habe ich gesucht.
danke
Code: Alles auswählen
def replace(s):
return ''.join(c for c in s if c.isalnum())
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
"Entfernen" im eigentlichen Sinn geht auch nicht, weil Python-Strings unveränderlich sind. Du kannst nur eine neue Zeichenkette erzeugen, die die Sonderzeichen nicht mehr enthält. Insofern ist eine Art "replace", indem die zu entfernenden Zeichen durch einen leeren String ersetzt werden, schon praktikabel. Ob es performant genug ist, musst du selbst sehen.Quitte hat geschrieben:Ich möchte alle sonderzeichen entfernen,
leider habe ich keine liste aller sonderzeichen!
Wie du die "Sonderzeichen" entfernen willst, ohne zu wissen, welche das sein sollen, weiß ich allerdings nicht. Oder was meinst du, wenn du sagst, du habest keine Liste aller Sonderzeichen?
-
- User
- Beiträge: 12
- Registriert: Freitag 22. Januar 2010, 15:38
Hey, da mach ich mit.
Nachtrag: warum werden hier eigentlich immer Backticks an Stelle von Anführungszeichen benutzt? Hab ich was verpasst?
Code: Alles auswählen
import re
special_chars = '&.!?ÄÜÖäüöß'
def remove_chars(s):
return ''.join(re.findall('[^' + special_chars + ']', s))
Ja, ich weiß nicht welche sonderzeichen ich habe, trotzdem kann ich sie entfernen!
Hab es jetzt hinbekommen!
Zwar nicht sehr ellegant aber es funktioniert:
Hierdurch werden alle Sonderzeichen entfernt!
Ich kann definieren was ich behalten will ähnlich wie bei preg_replace
Dieser Befehl lässt zum Beispiel nur Leerzeichen, große und kleine Buchstaben, Ziffern und deutsche Spezialbuchstaben übrig.
Der Rest wird entfernt!
Kann jetzt genau Definieren was behalten wird und dadurch alles unerwünschte entfernen obwohl ich das sonderzeichen nicht kenne!
danke nochmal für den Tipp mit re!
Nachtrag:
Oh, gerade gesehn das fledermausland was ähnliches gepostet hat,
aber wir gesagt, ich kenne die Sondezeichen nicht und muss daher umgekehrt herangehen!
Hab es jetzt hinbekommen!
Zwar nicht sehr ellegant aber es funktioniert:
Hierdurch werden alle Sonderzeichen entfernt!
Ich kann definieren was ich behalten will ähnlich wie bei preg_replace
Code: Alles auswählen
string = (" ".join(re.findall(r"[A-Za-z0-9üäöÜÄÖß]*", string))).replace(" "," ")
Der Rest wird entfernt!
Kann jetzt genau Definieren was behalten wird und dadurch alles unerwünschte entfernen obwohl ich das sonderzeichen nicht kenne!
danke nochmal für den Tipp mit re!
Nachtrag:
Oh, gerade gesehn das fledermausland was ähnliches gepostet hat,
aber wir gesagt, ich kenne die Sondezeichen nicht und muss daher umgekehrt herangehen!
Da hätte ich auch noch ein paar Varianten:
Code: Alles auswählen
>>> filter(str.isalnum, "abc[]äöü")
'abc'
>>> import string
>>> filter((string.ascii_letters+string.digits).__contains__, "abcd[]091ab")
'abcd091ab'
>>> import re
>>> exp = re.compile(r"[A-Za-z0-9üäöÜÄÖß]")
>>> filter(exp.match, "abcd[]ÄöÜ456")
'abcd\xc3\x84\xc3\xb6\xc3\x9c456'
Das Leben ist wie ein Tennisball.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Indem du sie einfach nicht in die Gruppe aufnimmst. Ich bezweifle im uebrigen, dass deine RE das tut, was du denkst, denn Leerzeichen sind gar nicht in der Gruppe enthalten.Quitte hat geschrieben:Kann jetzt genau Definieren was behalten wird und dadurch alles unerwünschte entfernen obwohl ich das sonderzeichen nicht kenne!
@jbs:
Code: Alles auswählen
>>> u"ü".isalnum()
True
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Interessant ist aber folgendes:
Code: Alles auswählen
>>> 'ü'.isalnum()
False
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@cofi
Ich bezweifle eher das du weisst was das Re Tut!
Man sieht das das Leerzeichen genauso wie alle anderen Sonderzeichen durch ein Leerzeichen ersetzt werden!
Damit bleiben die Leerzeichen erhalten!
Steht doch da
Probierst doch einfach mal aus!
natürlich kann man es auch so machen:
dann verschwinden die sonderzeichen ohne mit leerzeichen ersetzt zu werden.
Ich benötigte aber die erste Variante:
also erst ausprobiere, dann zweifeln
Da kannst du zweifeln wie du willst!cofi hat geschrieben:Indem du sie einfach nicht in die Gruppe aufnimmst. Ich bezweifle im uebrigen, dass deine RE das tut, was du denkst, denn Leerzeichen sind gar nicht in der Gruppe enthalten.Quitte hat geschrieben:Kann jetzt genau Definieren was behalten wird und dadurch alles unerwünschte entfernen obwohl ich das sonderzeichen nicht kenne!
@jbs:Code: Alles auswählen
>>> u"ü".isalnum() True
Ich bezweifle eher das du weisst was das Re Tut!
Man sieht das das Leerzeichen genauso wie alle anderen Sonderzeichen durch ein Leerzeichen ersetzt werden!
Damit bleiben die Leerzeichen erhalten!
Steht doch da
Probierst doch einfach mal aus!
Code: Alles auswählen
import re
string = "Das ist ein Test 4You c*f!. alle Zeichen die nicht erlaubt sind (wie z.B. das & oder [) werden durch leerzeichen ersetzt!"
print (" ".join(re.findall(r"[A-Za-z0-9üäöÜÄÖß.!()]*", string))).replace(" "," ")
Das ist ein Test 4You c f!. alle Zeichen die nicht erlaubt sind (wie z.B. das oder ) werden durch leerzeichen ersetzt!
Code: Alles auswählen
import re
string = "Das ist ein Test 4You c*f!. alle Zeichen die nicht erlaubt sind (wie z.B. das & oder [) werden durch leerzeichen ersetzt!"
print "".join(re.findall(r"[A-Za-z0-9üäöÜÄÖß.!() ]*", string))
Das ist ein Test 4You cf!. alle Zeichen die nicht erlaubt sind (wie z.B. das oder ) werden durch leerzeichen ersetzt!
Ich benötigte aber die erste Variante:
also erst ausprobiere, dann zweifeln
Das Problem ist, dass du nicht weißt was du willst und wenn du es doch wissen solltest, dann hast du es uns falsch mitgeteilt.Quitte hat geschrieben: [...]
dann verschwinden die sonderzeichen ohne mit leerzeichen ersetzt zu werden.
Ich benötigte aber die erste Variante:
also erst ausprobiere, dann zweifeln
Du hast mehrmals geschrieben, du möchtest die Sonderzeichen "entfernen". Jetzt, wo man dir eine Lösung dafür anbietet ist das auf einmal falsch und sie sollen in Leerzeichen verwandelt werden. Zudem gehst du plötzlich noch her und definierst Ausrufezeichen und Klammern als Nicht-Sonderzeichen. Dann liefert deine Variante auch noch das falsche Ergebnis, was auffällt wenn man die Leerzeichen zwischen das und oder zählt.
Flexibler (und zudem korrekt nach deiner letzten Definition) ist da folgender Ansatz:
Code: Alles auswählen
data = "Das ist ein Test 4You c*f!. alle Zeüchen die nicht erlaubt sind (wie z.B. das & oder [) werden durch leerzeichen ersetzt!"
reo = re.compile(r"[^\w\d.!()]", re.LOCALE)
foo = reo.sub(" ", data)
print(foo)
Das ist ein Test 4You c f!. alle Zeüchen die nicht erlaubt sind (wie z.B. das oder ) werden durch leerzeichen ersetzt!
@/me
Das Problem schein eher zu sein das du nicht richtig gelesen hast:
Hier ist meine Frage, gleich die erste Zeile:
preg_replace durchsucht die Zeichenkette nach Übereinstimmungen und ersetzt sie mit einem replacement.
Dies kann man nutzen um sonderzeichen zu entfernen indem man nur die zeichen definiert die bleiben sollen!
BlackJack hat mich auf das modul re verwiesen, was genau das kann was ich möchte!
Hab doch schon genau das erhalten was ich wollte!
dafür nochmal ein Dankeschön an BlackJack
Da steht also ganz deutlich das ich es mit etwas ersetzen will.
preg_REPLACE
p.s.
REPLACE steht bestimmt nicht für löschen
aber wofür kann Replace nur stehen LOL
Das Problem schein eher zu sein das du nicht richtig gelesen hast:
Hier ist meine Frage, gleich die erste Zeile:
Du scheinst das überlesen zu haben oder preg_replace nicht zu kennen!Hi,
ich suche eine Möglichkeit alle Sonderzeichens eines Strings zu entfernen,
ähnlich wie preg_replace in php!
preg_replace durchsucht die Zeichenkette nach Übereinstimmungen und ersetzt sie mit einem replacement.
Dies kann man nutzen um sonderzeichen zu entfernen indem man nur die zeichen definiert die bleiben sollen!
BlackJack hat mich auf das modul re verwiesen, was genau das kann was ich möchte!
Hab doch schon genau das erhalten was ich wollte!
dafür nochmal ein Dankeschön an BlackJack
Da steht also ganz deutlich das ich es mit etwas ersetzen will.
preg_REPLACE
p.s.
REPLACE steht bestimmt nicht für löschen
aber wofür kann Replace nur stehen LOL
Entfernen vs. Ersetzen? Ich lese da klar ein Entfernen.Quitte hat geschrieben:...ich suche eine Möglichkeit alle Sonderzeichens eines Strings zu entfernen,...
Quitte hat geschrieben:REPLACE steht bestimmt nicht für löschen
Code: Alles auswählen
>>> 'aaaa'.replace('a', '')
''
>>> import re
>>> re.sub('.', '', 'Wo ist nur der Text hin?')
''
Ja, ich weiss, es ist ziemlich schwer einen Satz zuende zu lesen.jerch hat geschrieben:Entfernen vs. Ersetzen? Ich lese da klar ein Entfernen.Quitte hat geschrieben:...ich suche eine Möglichkeit alle Sonderzeichens eines Strings zu entfernen,...
''[/code]
Wieso zitierst du nicht den ganzen Satz?
Ich schreibe nicht ohne Grund: ähnlich wie preg_replace in phpHi,
ich suche eine Möglichkeit alle Sonderzeichens eines Strings zu entfernen,
ähnlich wie preg_replace in php!
Hab hier jetzt auch keine Lust mehr nach Qualifizierten antwort und guten Vorschlägen von Benutzer mich hier mit Leuten rumzuplagen, die nur eine Hälte des ersten Satzen verstehen/beachten und mit mir ne halbe stunde diskutieren wollen!
Dieser Thread steht auf meiner Gedanklichen Blacklist, da er schon mit dem ersten Post beantwortet wurde!
Weil das nichts ändern würde:Ja, ich weiss, es ist ziemlich schwer einen Satz zuende zu lesen.
Wieso zitierst du nicht den ganzen Satz?
Code: Alles auswählen
preg_replace('[a]', '', 'Was da wohl passiert?');
Genau. Wir haben dir aufgezeigt, wie man mit regulären Ausdrücken Zeichen entfernen kann, genau so wie es mit preg_replace in PHP geht. Du hingegen tust hier so, als könne preg_replace ausschließlich Text durch Leerzeichen ersetzen. Wenn du nur eine einzige Anwendungsmöglichkeit für preg_replace kennst, dann ist es äußerst vermessen anderen mangelnde Kompetenz bei diesem Thema vorzuwerfen.Quitte hat geschrieben:Ich schreibe nicht ohne Grund: ähnlich wie preg_replace in php
Ein Satz von dir wie "Oh, da habe ich mich leider nicht korrekt ausgedrückt" wäre in Ordnung gewesen. Deine verzweifelt an den Haaren herbeigezogene "Argumentation" wirkt hingegen äußerst peinlich.Quitte hat geschrieben:Hab hier jetzt auch keine Lust mehr nach Qualifizierten antwort und guten Vorschlägen von Benutzer mich hier mit Leuten rumzuplagen, die nur eine Hälte des ersten Satzen verstehen/beachten und mit mir ne halbe stunde diskutieren wollen!