Seite 1 von 2

Re: @Milan

Verfasst: Freitag 22. November 2002, 23:57
von Voges
Hallo!
hans hat geschrieben:kann nicht behaupten dass dein Code richtig oder falsch ist, dafür müßte ich ihn ersteinmal verstehen :?
:-)
Also, das ?: ist in diesem konkreten Fall eigentlich überflüssig, hat für mich aber dokumentierenden Charakter.
regkey= r'(^|\s)eMail($|\s)'
Dann, denke ich, ist da schon klarer. (^|\s) steht für Stringanfang ODER Whitespace. Das ganze muss in Klammern stehen, damit klar ist, wo die beiden Alternativen anfangen und enden. Das gleiche Spiel nochmal für ($|\s).

Zum ?::
Im obigen Fall sind die runden Klammern nötig, um die ODER-Entscheidung zu ermöglichen. Andererseits nutzt man aber auch runde Klammern, um innerhalb von Regexps sogenannte Gruppen zu bilden.

Beispiel 1
Ich will eine Liste mit den Zahlen in den geschw. Klammern, die Klammern will ich aber nicht mit in der Liste haben:
s = "{4325} 23 {2343} 23 {4} 23 {}"
print re.findall(r'{(\d+)}',s) # --> ['4325','2343','4']


Beispiel 2
Ich will eine Liste mit den Zahlen in den geschw. Klammern und den Zahlen zw. "###"-Paaren:
s = "{4325} {2343} 34 ###4### 23"
print re.findall(r'(?:###|{)(\d+)(?:###|})',s) # --> ['4325', '2343', '4']


Das ?: ist nur ein Schalter, der verhindert, dass das Runde-Klammer-Paar zur Gruppierung herangezogen wird. Ohne diese ?: Schalter sähe die Liste so aus:
[('{', '4325', '}'), ('{', '2343', '}'), ('###', '4', '###')]

Jan

Verfasst: Samstag 23. November 2002, 10:12
von Milan
danke Voges, den Fehler hab ich nich gesehn... aber ich musste trotz deiner Erklärung noch ein paar mal in der Syntax nachschlagen, eh ich's kapiert hatte... ;)

Verfasst: Samstag 23. November 2002, 11:04
von hans
@Voges

Jetzt etwas verständlicher :? Ich muß da wohl noch etwas üben :!:

Ich bin aber auch etwas verwirrt. Ich dachte, dass re.search() immer nach ganzen Worten sucht, wobei ein Wort immer am Zeilenanfang steht oder mit Whitespace beginnt und immer am Zeilenende, mit Null oder Whitespace endet. (Kann sein, dass ich nicht alle Begrenzer genannt habe).

Wenn re.search() nur die reine Zeichenkombination sucht, kann ich dein Beispiel nachvollziehen. Wenn re.search() jedoch wortweise vergleicht, ist deine Suchfunktion etwas überfrachtet und würde nur Sinn machen, wenn man weitere Feldtrenner definieren will.

Hans

*

Verfasst: Dienstag 26. November 2002, 21:59
von x-herbert
... habe noch was im Netz gefunden...

Code: Alles auswählen

DecodeUnicodeString = lambda x: codecs.latin_1_encode(x)[0]
gruss x-herbert

Re: *

Verfasst: Dienstag 26. November 2002, 22:18
von Voges
Hallo!
x-herbert hat geschrieben:... habe noch was im Netz gefunden...
Ich steh' etwas auf dem Schlauch. In welchem Zusammenhang steht das zum bisher Erörterten?
Jan

@Voges

Verfasst: Donnerstag 28. November 2002, 09:33
von x-herbert
@Voges

=> geistiger Blindflug von mir: hat hier nix zu suchen

.. bin irgendwie mit meinen Fragen ducheinander gekommen ;-) => war eine Sache aus dem win32com-Bereich...

gruss x-herbert