J'essaie de transformer du texte de forme libre en quelque chose de plus structuré. J'ai un modèle complexe qui correspond à la grande majorité (bien au-delà de la limite minimum acceptable) des données disponibles, et je voudrais l'utiliser pour aider à structurer les données, plutôt que d'analyser le texte caractère par caractère. Le problème que je viens de rencontrer est qu'Oracle ne semble avoir aucun moyen de gérer les groupes de capture (à moins que je ne l'ait manqué d'une façon ou d'une autre?). Par exemple, mon expression a plusieurs groupes de capture nommés tels que ((?<runit_ID>\d+)-)
et (STAT_N|STTN|STAT|STN) ?(?<STAT>\w+)
. La base de code est entièrement écrite en PL/SQL, donc je ne peux pas utiliser C# ou quelque chose d'autre pour faire référence aux groupes de capture par leur nom. Comment les gens travaillent-ils autour de cela en PL/SQL?Groupes de capture d'expressions régulières dans Oracle PL/SQL
0
A
Répondre
1
En supposant que vous utilisez Oracle 10g ou supérieur, vous pouvez utiliser REGEXP_REPLACE avec des références arrières.
Voir les exemples dans le Oracle docs for REGEXP_REPLACE et dans ce article at regular-expressions.info.
Ok, maintenant j'ai quelque chose qui ressemble à: 'begin stat: = REGEXP_replace ('123 bla bla, STAT A, blah', '. + (STAT_N | STTN | STAT | STN)? (\\ w +). + ',' \\ 2 ', 1,1,' i '); num: = REGEXP_replace ('123 bla bla, STAT A, blah', '(\\ d +). +', '\\ 1', 1,1, 'i'); dbms_output.put_line (stat); dbms_output.put_line (num); end; ' Auparavant, num et stat étaient nommés groupes de capture. Je suppose que je devrais suivre ce modèle pour tous les autres groupes. Ou, écrivez simplement une fonction qui réécrit des groupes de capture nommés dans quelque chose comme ceci. Si je reçois du code pour ça, je le posterai. – FrustratedWithFormsDesigner