Re: kleines RegEx Problem
On 24.05.06 18:56:45, Frank Küster wrote:
> Andreas Pakulat <apaku@gmx.de> wrote:
>
> > '^([^_]+)_([^_]+)(_.+)*(\.orig\.tar\.gz|\.tar\.gz|\.diff\.gz|\.dsc|\.deb|\.udeb|\.package|\.source)$'
> >
> > Das Problem dabei: Bei foobar_version.orig.tar.gz erhalte ich fuer
> >
> > \1 = foobar
> > \2 = version.orig
> > \3 = tar.gz
>
> Ich sehe da vier subexpressions,
Jupp. Allerdings ist \3 im Falle von foobar_0.2.4.orig.tar.gz leer.
> aber bei der dritten fehlen mir
> brackets?
?? brackets? Wieso brackets? Die 3. matcht auf eine eventuell vorhandene
Architektur.
> > Das Problem: Ich kann keine weiteren Einschraenkungen in Gruppe 2
> > machen, da sowohl Buchstaben als auch . dort erlaubt sind. Ich muesste
> > also irgendwie ausdruecken, dass orig.tar.gz "Vorrang" vor tar.gz hat.
> > Nur da verlassen sie mich halt, so ein Regex-Guru bin ich leider nicht
> > :-(
> >
> > Jemand nen Tipp wie ich das mit einer regex erschlagen kann (mit
> > mehreren ist es kein Problem, das stoert dann aber im Progamm etwas)?
>
> Du verwendest ein Programm, das sich entsprechend regex(7) verhält, ja?
Ich verwende Python's re-Modul und bin da ehrlich gesagt ueberfragt.
> In Perl kann man nämlich das Matching non-greedy machen - das würde
> helfen.
In Perl geht das sowieso viel einfacher:
if file =~ m/...orig.tar.gz/:
orig = \1
elif file =~ m/...tar.gz/:
foobar = \1
In Python brauch ich fuer die Expandierung der subexpressions leider das
match-Objekt...
> Ansonsten habe ich keine Idee, außer dass man vielleicht die
> OR's (also '|') anders schachteln könnte, so à la
Ich hab jetzt erstmal 3 match-Objekte, eines fuer orig.tar.gz, eines
fuer tar.gz und eines fuer den Rest. Das orig.tar.gz wird als 1.
abgetestet und somit funktioniert das ganze. Nur schoen ist das eben
nicht.
Andreas
--
You will be awarded the Nobel Peace Prize... posthumously.
Reply to: