Probleme mit RegEx...

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.
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Re: @Milan

Beitragvon Voges » Freitag 22. November 2002, 23:57

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Samstag 23. November 2002, 10:12

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... ;)
Benutzeravatar
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Beitragvon hans » Samstag 23. November 2002, 11:04

@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
x-herbert

*

Beitragvon x-herbert » Dienstag 26. November 2002, 21:59

... habe noch was im Netz gefunden...

Code: Alles auswählen

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


gruss x-herbert
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Re: *

Beitragvon Voges » Dienstag 26. November 2002, 22:18

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
x-herbert
User
Beiträge: 59
Registriert: Mittwoch 27. November 2002, 20:52

@Voges

Beitragvon x-herbert » Donnerstag 28. November 2002, 09:33

@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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]