Hallo zusammen,
ich würde gerne aus dem folgenden Beispiel nur Wörter Filter, am Liebsten mittels "re — Regular expression operations".
Beispiel:
"$50.000_Zhuhai_2016
0 Banja_Luka_Challenger_2017
Vorlage:Taxobox/Doku
!Amerika!"
würde gerne so etwas wie das folgende bekommen:
"Zhuhai"
"Banja"
"Luka"
"Challenger"
"Vorlage"
"Taxobox"
"Doku"
"Amerika"
Vielen Dank vorab
Freundliche Grüße
Vinz
Wörter erkennen.
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Vinz: Das `re`-Modul in der Standardbibliothek ist selbstverständlich dokumentiert. Es gibt in der Dokumentation auch noch ein extra HOWTO zu dem Thema, was dort auch verlinkt ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
@Vinz: Schau dir reguläre Ausdrücke an und dort speziell Character Sets. Die Standardbibliothek bietet mit dem re-Modul eine Schnittstelle dafür. Das ist bloß ein Einzeiler, wenn man die passende Funktion verwendet.
Komplettlösungen bieten wir hier übrigens selten, falls du dir das mit deinem Thread erhofft hast. Vor allem, wenn es recht offensichtlich nach einer Hausaufgabe aussieht.
Komplettlösungen bieten wir hier übrigens selten, falls du dir das mit deinem Thread erhofft hast. Vor allem, wenn es recht offensichtlich nach einer Hausaufgabe aussieht.
Hilft das Dir etwas weiter?
https://stackoverflow.com/questions/375 ... n-a-string
Online kannst Du gute Hilfen zum Zusammenbau von regulären Ausdrücken finden.
https://stackoverflow.com/questions/375 ... n-a-string
Online kannst Du gute Hilfen zum Zusammenbau von regulären Ausdrücken finden.
und hier https://regexr.com/ kann man sehr gut mit regular expressions rumspielen
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
In der Definition von \w sind allerdings auch Ziffern enthalten. Wenn man ein Wort als reine Buchstabenfolge ansieht (was ja durchaus gängig und hier gewünscht ist), dann muss man sein eigenes Set festlegen.pixewakb hat geschrieben: ↑Montag 31. Dezember 2018, 13:19 Hilft das Dir etwas weiter?
https://stackoverflow.com/questions/375 ... n-a-string
Also entweder [a-zA-Z] oder [a-z] in Verbindung mit dem Flag re.IGNORECASE. Und dahinter noch das Zeichen für "mindestens einmal".
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@snafu: Wobei hier dann interessant ist ob und welche Zeichen ausserhalb von ASCII dabei (nicht) erfasst werden. Falls das eine Rolle spielt.
Man könnte das `regex`-Modul nehmen und da dann [\p{Letter}] als Zeichenklasse.
Man könnte das `regex`-Modul nehmen und da dann [\p{Letter}] als Zeichenklasse.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Das lässt sich natürlich endlos weiterspinnen, aber wenn ich nur englische und deutsche Wörter erwarte und dementsprechend auch Umlaute behandeln muss, dann sollte folgendes ausreichen:
Außerdem möchte man sich vielleicht überlegen, ob Wörter mit Bindestrichen als ein durchgängiges Wort oder als einzelne Wörter zählen sollen. Falls Bindestriche auch als Trennzeichen vorkommen können, wird es noch einmal spannender: Bleibt der Bindestrich erhalten oder soll er im Ergebnis entfernt werden? Für letzteres könnte man ein automatisches Entfernen einbauen, falls ein Zeilentrenner (\n) folgt. Das ist hier aber vermutlich etwas zuviel des Guten...
Code: Alles auswählen
re.findall(r'[a-ü]+', text, re.IGNORECASE)
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@snafu: Das erwischt so einiges was kein Buchstabe ist. Kleine Auswahl:
Code: Alles auswählen
In [151]: re.findall(r'[a-ü]+', '{funktioniert} ¬ hoch² ±2¢', re.IGNORECASE)
Out[151]: ['{funktioniert}', '¬', 'hoch²', '±', '¢']
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@snafu: Ich verstehe nicht worauf Du hinaus willst? ``a-ü`` ist IMHO definiert als alle Zeichen mit den Zahlwerten von ``ord('a')`` bis einschliesslich ``ord('ü')``, also die Unicode-Codepoints. Das ist wohldefiniert. In Python 2 bei Bytezeichenketten hängt das natürlich von der Kodierung des Quelltextes ab, aber auch da ist das dann entsprechend definiert. Was gibt es da zu verbessern? Also ausser das man das `regex`-Modul nehmen kann, was dann so etwas wie ``\p{Letter}`` in Zeichenklassen innerhalb von regulären Ausdrücken kennt, das auf alles passt, was in der Unicode-Spezifikation als Buchstabe definiert ist. Man könnte das beim `regex`-Modul über diese Eigenschaften auch noch weiter eingrenzen. Zum Beispiel auf Buchstaben (logisches) und Codepoints aus dem (erweiterten) lateinische Zeichen-Block. Damit hätte man dann Buchstaben, aber zum Beispiel keine klingonischen Buchstaben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman