30. august 2010 - 01:56Der er
10 kommentarer og 1 løsning
Match og extract
Yo,
Jeg bruger .NET til dette, så håber min kode stadig kan forstås og der kommer nogen gode forslag som kan gøre mig lidt klogere.
Jeg har følgende lige nu: MacroRegex = new Regex(@"\$(?<Name>[A-z_]+?)(\((?<Param>[\S ]*?)(\|(?<Param>[\S ]+?))*\))?\$", RegexOptions.Compiled);
Dette kan match: $DATE$ # Date i Name group og ingenting i Param. $DATE(5)$ # Date i Name group, og 5 i Param. $UPPER(some string)$ $DATE($DATE$)$ - virker fint, da match af enden er unik, men nedestående virker ikke.
Alt virkede næsten ... problemet kommer ved: $DATE($TIME(5)$)$ - Param indeholder nu "$DATE(5" ... og ja, den skulle gerne indeholde "$DATE(5)$ ... og ja, det er forstående lidt ... men hvordan dælen løser jeg det.
Jeg er helt blank for ideer, og er ikke specielt meget inde i Regex, så der er sikkert en smart måde det kan løses på.
Jeg kan godt ændre i min måde at match stringe på, hvis det så kan løses på en bedre/nemmere måde, bare buttom result bliver det samme.
Ja, jeg har i hvert fald fundet ud af at Regex, måske ikke lige er vejen frem ... det kan i hvert fald være meget besværligt.
Det skal bruges til et oversættelses system jeg roder med for sjov, men den her ting ARGHHHH.
Men måske man skulle prøve at se hvor nem/besværlig en parser ville være at få til at virke godt ... tænke tænke, hvis du har input skal du være meget velkommen :-)
Problemet er også lidt at jeg har nogen macros som resolver til andre ...
$NAME$ kunne blive til $FIRSTNAME$ $LASTNAME$ ... og ja, you get the idea.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.