Benutzereingabe und das Modul re

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ _blackjack_ :
vielleicht ist es bereits zu spät, vielleicht bin ich einfach auch nur zu dumm. Momentan will's einfach nicht in meine Birne.
Wenn ich einen Teststring "67\78" habe und somit nach *einem* \ suche, dann gebe ich als regex (input) "\\" ein und es gibt einen Treffer (siehe unser Script) ...
wenn ich nach einer windows-spezifischen Pfadangabe suche "c:\blablub", dann muß ich *vier* \ nehmen, da der Pfad in Python "c:\\blablub" heißt, weil der *eine* \ durch einen *zweiten*\ maskiert werden muß ... komm, laß gut sein ...
Vielen Dank für deine kostbare Zeit, die du für mich geopfert hast. Vielleicht wird's mit Beispielen einfacher ...
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich habe doch jedes mal Beispiele geliefert. Und Du schreibst jetzt doch selbst das Du wenn Du nach *einem* \ suchst, im regulären Ausdruck *zwei* \ benötigst.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ _blackjack_ :
ich kenne leider nicht alle Methoden/Funktionen, die du in deinen Beispielen aufgeführt hast, muß ich erst mal nachlesen ...
ja, wenn ich *einen* \ suche, dann *zwei*\ in regex, das ist klar, aber eben nicht *vier* \ !
*vier* \ in regex, wenn ich *zwei* suche ...

diese Aussage von dir (auf's Wesentliche gekürzt) verwirrt mich eben:
Um *einen* \ zu matchen [...] so: '\\\\' [...]
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Perlchamp: Um einen \ zu matchen braucht der reguläre Ausdruck zwei \ und um zwei \ in einem normalen Zeichenkettenliteral in Python zu schreiben braucht man vier \. Man muss den einen \ einmal für den regulären Ausdruck escapen, und dann die beiden noch mal für den Python-Compiler, macht insgesamt vier. Weil, und hier wiederhole ich mich jetzt nochmal: '\\\\' ist ein Zeichenkettenliteral das eine Zeichenkette mit *zwei* \ beschreibt:

Code: Alles auswählen

In [83]: len('\\\\')
Out[83]: 2

In [84]: print('\\\\')
\\
Und jetzt sag bitte nicht das Du `len()` und `print()` nicht kennst.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ _blackjack_ :
ja, nee, len() und print() kenne ich bereits ;-)
das Prinzip ist generell klar :
die doppelte Anzahl des zu matchenden Strings in der regex, kein Thema, war mir immer klar.
Der Hase liegt woanders begraben (das war auch die ganze Zeit das Mistverständnis; dass ich nie den Compiler in Betracht gezogen habe, was jedoch für dich selbstverständlich war.) :
warum muß ich das nochmals für den Compiler doppeln (also dann insgesamt zweimal doppeln) ?
ich habe doch den Teststring (mit *einem* \) und meine regex (mit *zwei* \). Findet doch das Match durch 're.search()' und gut ist. Warum muß ich also nochmals für den Compiler die regex maskieren (=> *vier* \) ?
Wo liegt mein Denkfehler ?
Unser Script liefert doch ab !
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Perlchamp: In dem Skript wird der reguläre Ausdruck ja auch vom Benutzer eingegeben und steht nicht im Quelltext. Also muss er auch nicht am Python-Compiler vorbei.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ _blackjack_
jetzt wird ein Schuh draus, verstehe ... ok damit ist der Groschen endgültig gefallen :-)
ich danke dir nochmals für deine Geduld und deine Zeit.
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Antworten