@ _blackjack_ :
Danke für deine schnelle Antwort
Um einen Backslash zu matchen musst Du immer *zwei* eingeben, auch bei einer r-Zeichenkette.
ok, verstanden. Aber jetzt kommt wieder ein Punkt, der mich schier verzweifeln läßt :
Um *einen* \ zu matchen muss die Zeichenkette im Python-Quelltext entweder so aussehen: r'\\' oder aber ohne das r so: '\\\\'. Beide Zeichenketten enthalten genau zwei \:
Hast du dich vertippt? Sollte es nicht heißen:
"um *zwei* \ zu matchen [...]
Die Bedingung ist auch für den Fall nicht gut, weil viel zu unübersichtlich, und wie gesagt, hast Du den Code für die Abfrage *zweimal* im Quelltext stehen. Das verletzt das DRY-Prinzip (Don't Repeat Yourself).
DRY habe ich verstanden
Dann werde ich eine zweite Schleife einbauen - kein Thema. Hatte ich aus dem Buch "Python 3 - lernen und PROFESSIONELL anweden". Vielleicht lese ich ja die falschen Bücher
Bei den regulären Ausdrücken möchtest Du vielleicht auch auf Fehleingaben reagieren, denn es ist ja nicht schwer auch mal syntaktisch nicht korrekte reguläre Ausdrücke einzugeben, und dann sollte das Programm vielleicht nicht einfach abbrechen, sondern den Benutzer auch diese Eingabe wiederholen lassen.
Das Script bricht ja nur ab, oder sollte nur dann abbrechen, wenn der Benutzer die Enter-Taste drückt, OHNE eine Eingabe zu machen (die Enter-Taste persé mal nicht als Eingabe zu verstehen).
Aber klar, hatte ich bereits bemerkt und werde wohl eine try...except-Anweisung einbauen müssen.
Weitere Anmerkungen: Sternchen-Importe sind Böse.
ok, wenn ich das richtig verstehe, dann werden durch "import [moduname]" die Funktionen/Methoden des entsprechenden Moduls 'nur' zur Verfügung gestellt und nur dann die betreffende Funktion/Methode in den Speicher oder Namensraum geladen, wenn ich sie (durch das Script) aufrufe. Richtig ?
Wie Du `ausgabe` erstellst ist übrigens nicht robust. Du verlässt Dich da auf eine Zeichenkettendarstellung von Match-Objekten die nicht dafür gedacht ist für eine Ausgabe zurechtgestückelt zu werden. Die Informationen die da enthalten sind, kannst Du auch alle von dem Objekt abfragen und selber passend in eine Zeichenkette formatieren.
ich dachte, das hätte ich gemacht; dies war jedenfalls mein Gedanke. Vielleicht kannst du zeigen, wie es richtig geht ?
`ra` und `x` sind keine guten Namen, wiel die überhaupt nicht vermitteln was die Werte dahinter bedeuten.
ok, werde ich definitv ändern, danke !
`regChecker()` schriebt man in Python `reg_checker()`. Alles ausser Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase) wird klein_mit_unterstrichen geschrieben.
Stand als Alternativvorschlag auch in dem Buch. Aber "reg_checker" ist mir auch wesentlich sympathischer
werde ich ab sofort auch so handhaben.
Zwischen einer Funktion/Methode und der öffnenden Klammer der Argumentliste gehört kein Leerzeichen.
ok, (im Hirn) gespeichert
Hier mal als Code was ich über den Programmfluss/die Organisation der Schleifen geschrieben habe. Ausserdem eine Idee wie man die Informationen aus dem Match-Objekt für eine Ausgabe aufbereiten kann in dem der Treffer ”unterstrichen” angezeigt wird. Zudem mit Abfangen von Fehlern im regulären Ausdruck.
super, danke. Muß ich aber erst noch durchlesen und begreifen. Damit hat sich meine Bitte von oben erledigt, daaaanke !
@_deets_ :
persönliche Frage:
deets kommt von "Kopf" (=> Hesse oder Pfälzer ?) ?
Man kann keine r-Strings "eingeben". r-Strings sind einzig und alleine eine Sache des Python Lexers, der deinen Quellcode verarbeitet. Du musst auf der anderen Seite aber auch ueberhaupt nichts extra escapen, denn diese Notwendigkeit ist AUCH nur eine, die der Python-Lexer von dir verlangt. Denn der will ja aus \n ein newline machen.
ok, verstanden. Dann lese ich wohl auch noch die falschen Tuts, oder verstehe diese nicht
Code: Alles auswählen
import re
rex = input("rex eingeben:")
eingabe = "..A"
print(re.match(rex, eingabe))
funktioniert zB mit Eingabe
...
..A
aber nicht
..\.
eh klar. Darum ging es mir auch nicht. Ist eigentlich "re.search" nicht 'besser' als "re.match", abgesehen von evtl. Laufzeiten oder Speicherbelegungen ?
Aber deine nächste Bemerkung kommt meiner ursprünglichen Frage (eigentlich) am nächsten:
Das war es ja gewesen:
Im Script funktionierte
Aber nicht, wenn ich es als Variable übergeben hatte:
Code: Alles auswählen
ra = input ("Regex :") ## Eingabe: r"blablub"
print(ra) ## Ausgabe: r"blablub"
re.search(ra, teststring) ## no matching !
das habe ich eben noch nicht verstanden. Es ist also nicht das Ding, WO etwas geparst wird, sondern VON WEM, richtig?