Autor Beitrag
bergrath
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Do 13.12.07 11:40 
Hallo Leute.

Ich ärgere mich seit 2 Tagen mit einem Regex-Problem herum. Ich muss aus einer Textdatei verschiedene Ausdrücke rausfiltern. Die meisten habe ich auch schon herausgefiltert, aber bei einer Art von Ausdrücken hänge ich nun schon seit 2 Tagen fest.

Auslesen will ich Ausdrücke folgener Art:

(55,6*5*4)+(4041,UB*IG)=SWAA

(45,8*B*Y*I*K*L)*(65,Z*Y*X*C)=SWAB

Um den Ausdruck einer solchen Klammer auszulesen habe ich folgende Regex formuliert, welche auch funktioniert:

new Regex("([(]([2-8][0-9][0-9][0-9]|[2-8][0-9])[,]([0-9A-Z]*[*]*)+[)])[=][S][A-Z]{3}");

Mit dieser Regex erhalte ich Ergebnisse in dieser Art, was auch korrekt ist

(35,3*7*C*G*K*O*S*W)=SWBD gefunden an Position: 7369
(35,4*8*D*H*L*P*T*X)=SWBE gefunden an Position: 7497
(7677,K5*BQ*BR*BS)=SWBH gefunden an Position: 8916
(7677,K6*BD)=SWBI gefunden an Position: 9042

Leider bekomme ich es nicht hin, dass ich das + oder * und die zweite Klammer dahinter auslesen kann. Ich habe schon sehr viel probiert, aber es klappt nicht. Normalerweise ist ja die zweite Klammer genauso aufgebaut wie die erste, weshalb es ja gehen müsste den ersten Ausdruck nochmal zu kopieren und eine +bzw.*-Verknüpfung dazwischen zu schieben.

Ich weiss nicht wieso, aber das geht nicht, wenn ich die erste Klammer nochmal kopieren und mit UND oder ODER verknüpfe. Dies sieht dann so aus:

("([(]([2-8][0-9][0-9][0-9]|[2-8][0-9])[,]([0-9A-Z]*[*]*)+[)])[+]*([(]([2-8][0-9][0-9][0-9]|[2-8][0-9])[,]([0-9A-Z]*[*]*)+[)])[=][S][A-Z]{3}")

Woran könnte das liegen? Hat jemand Tipps oder Vorschläge wie diese gesuchten Ausdrücke abfragbar sind??? Vielen Dank im Voraus.

Mfg
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 13.12.07 13:29 
Was soll ich dazu sagen... außer dass es bei mir funktioniert :?!?: ?

PS: Man kann reservierte Zeichen auch einfach escapen: "\+" matcht ein Plus-Zeichen.
Einloggen, um Attachments anzusehen!
bergrath Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Do 13.12.07 15:46 
Hi.

Also bei mir funktioniert der Ausdruck nicht. Mein Programm hängt sich dabei immer auf. Wenn ich nur nach einem Ausdruck in Klammer suche ohne die Verknüpfung mit einer zweiten Klammer durch * oder + funktioniert es, aber sobald ich verknüpfe geht nix mehr.

Woran kann das liegen? bin echt am Verzweifeln....

vielen Dank für Tipps im Voraus.

MfG
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 13.12.07 15:50 
user profile iconbergrath hat folgendes geschrieben:
Mein Programm hängt sich dabei immer auf.
Geht es bitte noch etwas unpräziser :zwinker: ?
Da das Regex-Lab schließlich die gleiche Regex-Klasse benutzt, gehe ich stark davon aus, dass der Fehler in deinem restlichen Programm liegt.
bergrath Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Do 13.12.07 15:57 
ja sorry, aber bin im Moment etwas gestresst und neben der Kappe.
Ich frage andere Ausdrücke ab und die funktionieren einwandfrei, also denke ich nicht dass es an meinem Programm hängt. Der Ausdruck denn ich mit dieser Regex abfragen will besteht aus 2 Klammern die gleich aufgebaut sind. Wenn ich nur die erste Klammer abfrage funktioniert es ja auch. Deswegen verstehe ich absolut nicht woran das liegen könnte.

MfG
bergrath Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mo 17.12.07 12:18 
Hallo.

Bin leider immer noch nicht weiter gekommen und langsam am verzweifeln. Wollte jetzt mal meinen Regex-Ausdruck mit irgendeinem Regex-Tester ausprobieren, aber manche funktionieren nicht auf den gefundenen Internetseiten und Programme, die ich installiert habe, hängen sich beim Testen auf. Deshalb wollte ich mal fragen welche Programme für Tests am besten geeignet sind und vorallem die selbe Test-Engine nutzen wie .NET.

Vielen Dank für euere Antworten im Voraus.

Edit: Habe jetzt einen gefunden und zwar den Regular Expression Designer. Der funktioniert zwar, aber ist sehr langsam glaube ich - der hat 20 minuten gebraucht für einen Test der normal höchstens 1-2 Minuten dauern dürfte. Kennt ihr welche die schneller sind als dieser Regular Expression Designer???


MfG
bergrath Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mo 17.12.07 13:52 
hi.

Habe jetzt mittlerweile festgestellt, daß mein Regex-Ausdruck doch funktioniert. Nur dauert es bei diesem Ausdruck wesentlich länger bis es ausgewertet ist. Aber mir ist es ein Rätsel wieso es bei diesem Ausdruck 15 Minuten lang dauert bis er ausgewertet ist.

Grob gesagt handelt es sich ja hier nur um 2 Klammern verbunden durch ein Oder oder ein Plus. Wenn ich nur eine Klammer abfrage, erhalte ich die Ergebnisse innerhalb von Sekunden. Dann kann es doch eigentlich nicht sein, daß es bei der nur unwesentlich längeren Variante mit 2 Klammern 15 Minuten vergehen bis das Programm die Ergebnisse ausspuckt.

Woran könnte das liegen? Der Eingabestrom der geprüft wird ist immer gleich groß. Wie kann man das Ganze noch beschleunigen. Gibt es da irgendwelche Möglichkeiten?

Für eure Tipps und Hinweise schonmal Danke im Voraus.

MfG