regular expressions problem
regular expressions problem
hallo,
folgendes problem:
habe mehrere pakages:
x11-devel-i486-6.9.0
x11-i486-6.9.0
bzip2-i386-1.2
nun moechte ich aus dem oberen beispiel nur:
x11-deve-i486l haben, aus dem naechsten nur x11-i486 und aus dem letzten bzip2-i386...
hatte es hiermit versucht: .*(!?-\d+)
leider klappt das nicht, kann mir da jemand weiterhelfen?
es gibt nichts was ich mehr hasse als regexp
gruß,
slack
folgendes problem:
habe mehrere pakages:
x11-devel-i486-6.9.0
x11-i486-6.9.0
bzip2-i386-1.2
nun moechte ich aus dem oberen beispiel nur:
x11-deve-i486l haben, aus dem naechsten nur x11-i486 und aus dem letzten bzip2-i386...
hatte es hiermit versucht: .*(!?-\d+)
leider klappt das nicht, kann mir da jemand weiterhelfen?
es gibt nichts was ich mehr hasse als regexp
gruß,
slack
Guten Tag
Mit regulaeren Ausruecken kannst du da auch nichts machen, weil regulaere Ausdruecke als endliche Automaten nicht in der Lage sind zu zaehlen.
Was du brauchst ist eine Substitution.
Beispiel fuer die bash:
hth
Marco
Mit regulaeren Ausruecken kannst du da auch nichts machen, weil regulaere Ausdruecke als endliche Automaten nicht in der Lage sind zu zaehlen.
Was du brauchst ist eine Substitution.
Beispiel fuer die bash:
Code: Select all
$ var="x11-devel-i486-6.9.0"
$ echo ${var%-*}
Marco
hmm...
es geht mir ja nicht ums zaehlen... ich brauche einen ausdruck der genau das macht:
jedes zeichen solange kein -(zahl...) kommt markieren
ja ich koennte es zur not auch mit dem echo... machen, indem ich in popen ne pipe zum lesen aufmach und das in der sh ausfuehr, ist aber nicht gerade toll :/
jedes zeichen solange kein -(zahl...) kommt markieren
ja ich koennte es zur not auch mit dem echo... machen, indem ich in popen ne pipe zum lesen aufmach und das in der sh ausfuehr, ist aber nicht gerade toll :/
hello again
Ein endlicher Automat, und damit ein regulaerer Ausdruck loest das sogenannte Wortproblem. Er entscheidet, ob ein Wort zu der Sprache, welche durch den Regulaeren Ausdruck definiert ist, gehoert oder nicht.
Regulaeren Ausdruecken fehlt ein Stack mit dem sie zaehlen koennten (zur Loesung dieses Problems kann man sogenannte Kellerautomaten beiziehen)
Du musst also die Idee, dein gesamtes Problem mittels eines regulaeren Ausdruckes loesen zu wollen verwerfen.
Was du jedoch tun kannst, ist folgendes:
Du grenzt deinen String ein, partitionierst ihn also auf die Anzahl zu untersuchender Zeichen (das sind in deinem Fall genau 2) und fuehrst dann auf diesem Teilstring einen regex durch und wertest dann das Ergebnis aus.
Dieser kann recht einfach aussehen (nicht implementierungsspezifisch !):
Ich hoffe du verstehst wo das Problem tatsaechlich liegt.
hth
Marco
Ein endlicher Automat, und damit ein regulaerer Ausdruck loest das sogenannte Wortproblem. Er entscheidet, ob ein Wort zu der Sprache, welche durch den Regulaeren Ausdruck definiert ist, gehoert oder nicht.
Regulaeren Ausdruecken fehlt ein Stack mit dem sie zaehlen koennten (zur Loesung dieses Problems kann man sogenannte Kellerautomaten beiziehen)
Du musst also die Idee, dein gesamtes Problem mittels eines regulaeren Ausdruckes loesen zu wollen verwerfen.
Was du jedoch tun kannst, ist folgendes:
Du grenzt deinen String ein, partitionierst ihn also auf die Anzahl zu untersuchender Zeichen (das sind in deinem Fall genau 2) und fuehrst dann auf diesem Teilstring einen regex durch und wertest dann das Ergebnis aus.
Dieser kann recht einfach aussehen (nicht implementierungsspezifisch !):
Code: Select all
-[0-9]
Ich hoffe du verstehst wo das Problem tatsaechlich liegt.
hth
Marco
ehrlich gesagt versteh ich das nicht...
hatte immer dieses "kodos" - und damit hab ich immer "gearbeitet".
es ist nur ein string (hab ne funktion die immer wieder aufgerufen wird), also versteh ich auch nich ganz wie du das mit dem zaehlen meinst...
werd mir das ganze morgen nochmal in ruhe angucken
thx fuer die hilfe
gruß
hatte immer dieses "kodos" - und damit hab ich immer "gearbeitet".
es ist nur ein string (hab ne funktion die immer wieder aufgerufen wird), also versteh ich auch nich ganz wie du das mit dem zaehlen meinst...
werd mir das ganze morgen nochmal in ruhe angucken
thx fuer die hilfe
gruß
Wenn ich dich richtig verstanden habe, willst du alles nach dem letzten "-" abschneiden. Dieses Problem kann man nur mit "non-greedy"-Quantifiers lösen. Das wäre z.B. mit AREs "(.*)-.*?"
Ein Beispiel mit Tcl:
Janka
Ein Beispiel mit Tcl:
Code: Select all
$ tclsh
% regsub {(.*)-.*?} x11-devel-i486-6.9.0 {\1}
x11-devel-i486
% regsub {(.*)-.*?} x11-i486-6.9.0 {\1}
x11-i486
% regsub {(.*)-.*?} bzip2-i386-1.2 {\1}
bzip2-i386
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
Ich mag die Schreie.
Die Fragestellungen sind deshalb auch ungenau. Die Antworten werden nicht richtig gelesen und deshalb fragt man einfach noch einmal. Da bemerkt man auch die geringe Eigeninitiative.Immer oefter habe ich das Gefuehl, dass die Leute selbst gar nicht wissen was sie eigentlich wollen....
Und das bezieht sich jetzt nicht nur auf diesen Thread hier.
Einmal antworten und wenn man merkt das nichts dabei rauskommt, Finger davon.
Google spuckt das übrigens in <1 sec. raus
Die korrekte Formulierung eines Problems ist aber schon Teil der Lösung. Wenn man erst einmal weiß, wonach man sucht, ist der Rest vielfach Fleißarbeit.
Mich nerven viel mehr Fragesteller, die eine beschriebene funktionierende Lösung nicht ausprobieren können, weil dies irgendwelche Randprobleme erzeugt, von denen sie im Ursprungsposting aber nichts erwähnt haben. Oder die Randprobleme sind eingebildeter Natur, das ist dann noch schlimmer.
Janka
Mich nerven viel mehr Fragesteller, die eine beschriebene funktionierende Lösung nicht ausprobieren können, weil dies irgendwelche Randprobleme erzeugt, von denen sie im Ursprungsposting aber nichts erwähnt haben. Oder die Randprobleme sind eingebildeter Natur, das ist dann noch schlimmer.
Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
Ich mag die Schreie.
@marco und texture
kein plan was fuer probleme ihr habt, mir auch egal, ich habe nach einer stinknormalen regex gefragt - habe btw. lange gegoogled und rumprobiert, also spart euch bitte so "vermutungen" wie geringe eigeninitiative - sowas finde ich beleidigend.
"Einmal antworten und wenn man merkt das nichts dabei rauskommt, Finger davon."
sehe hier keine antwort von dir, also am besten gleich finger von lassen,
mag sicher sein das die fragestellung etwas ungenau war, finde aber mit den antworten von mir durchaus verstaendlich. immerhin wusste janka was ich mein.
werd da auch nix mehr zu schreiben, keine lust auf ne diskussion
kein plan was fuer probleme ihr habt, mir auch egal, ich habe nach einer stinknormalen regex gefragt - habe btw. lange gegoogled und rumprobiert, also spart euch bitte so "vermutungen" wie geringe eigeninitiative - sowas finde ich beleidigend.
"Einmal antworten und wenn man merkt das nichts dabei rauskommt, Finger davon."
sehe hier keine antwort von dir, also am besten gleich finger von lassen,
mag sicher sein das die fragestellung etwas ungenau war, finde aber mit den antworten von mir durchaus verstaendlich. immerhin wusste janka was ich mein.
werd da auch nix mehr zu schreiben, keine lust auf ne diskussion