PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RegExp-Problem


medi
2009-07-24, 12:18:46
Hi,

Ich bekomm folgendes Problem einfach nicht gebacken...habe hier den Inhalt einer Datei und will den fetten Part mit einem regulären Ausdruck extrahieren...wie mach ich das?

$(---------------------------------------------------------------------------
-- Method: .addColumn()
--
-- Description: adds a column to the current list ( fg.ds )
-- dsfs fs sjghk ( fg.ds )
-- ewrw erwe ff dfsf fsdfawe ( fg.ds )
--
-- Method Type: Procedure
--
-- Arguments:
-- [#] [R/RW] [Data Type] [Description]
-- 1 R ARRAY column to add
-- Return:
-- [Data Type] [Description]
---------------------------------------------------------------------------$)

mein bisheriger Ausdruck sah so aus:
-- +Description\: *((?:(?:\w* *\.*)*(?:\(|\))?)*(?:(?:\r\n--) *(?:(?:\w* *\.*)*(?:\(|\))?)*)*)
allerdings zieht er da vor allem die "-- Method Type" Zeile mit rein - was er unter gar keinem Fall machen soll. (scheinbar bricht er auch nur am : ab)

Mit lookahead komm ich nicht klar bzw. weiss ich nicht wo ich das am besten plazieren denn so:
-- +Description\: *((?:(?:\w* *\.*)*(?:\(|\))?)*(?:(?:\r\n--) *(?:(?:\w* *\.*)*(?:\(|\))?)*)*)(?=\r\n-- +Method) gehts nicht ;(

Bin grad böse am verzweifeln...

Jemand ne Idee?

Gast
2009-07-24, 12:25:45
Sind es immer 2 Zeilen nach 'Description' die dazugehören?
Muss es umbedingt mit Regexp sein?
So zeilenbasierte Dinge gehen mit (g)awk eigentlich recht komfortabel.

medi
2009-07-24, 12:37:31
Nein es sind beliebig viele Zeilen nach Description, also null bis sagen wir maximal 20 (real geschätz).

(g)awk sagt mir jetzt nichts. Allerdings muss ich zwingend RegExps nehmen und komm da auch nicht drum rum.

Als Software wird dann C# genutzt, was wiederum die RegExp einbindet (und vorher aus nem Config file ausliest). Es soll halt höchst mögliche Flexibilität erreicht werden.

Gast
2009-07-24, 14:35:57
Da wärs dann glaub ich einfacher auf Description zu matchen und von dort alle Zeilen zu nehmen bis 'Method Type'. In Description darf halt dann die Zeichenfolge Method type nicht vorkommen....

medi
2009-07-24, 14:53:40
ok nochmal: ich darf nur einen einzigen regulären ausdruck benutzen um das ergebnis zu erhalten. ich darf weiterhin keine programmlogik nutzen um das ergebnis zu filtern. was ich haben will muss ich einzig und allein über den regulären ausdruck realisieren.
deswegen lautet meine frage: wie realisiere ich das mit einem RegExp? nur weil ich scheinbar zu blöd dafür bin den hinzukriegen heisst es nicht, dass es nicht geht (zumindest glaub ich nicht das es das heisst ;)

Neomi
2009-07-24, 19:36:38
Versuch mal, nur Zeilen mitzunehmen, die zwischen dem "-- " und dem Zeilenumbruch noch mindestens ein weiteres Zeichen haben. Dann sollte er bei der ersten Zeile, die (bis auf das Kommentargedöhns) leer ist, abbrechen.

Trap
2009-07-24, 21:37:13
Ich kann da nur immer wieder http://weitz.de/regex-coach/ empfehlen. Darin kann man interaktiv gucken was die Regexp matcht.

randy
2009-07-25, 07:29:49
--\s*Description:[\s*\w*]*\s*\(\s*fg.ds\s*\)\s*\r(--\s*[\w*\s*]*\(\s*fg.ds\s*\)\s*\r){0,20}

ggf. musst du den newline (\r) wert an dein system anpassen. ob das ( fg.ds ) statisch im text ist oder nicht (bzw. der Text in der Klammer), ist mir auch nicht klar. Da er in jeder Zeile gleich war, werte ich ihn als statisch (trotzdem könnten die Anzahl whitespaces verschieden sein?)

Erfolgreich getestet auf http://www.gskinner.com/RegExr/