2010-04-07 5 views
1

Je souhaite renvoyer des correspondances à partir d'une chaîne d'expression régulière. La chaîne est regex:Expression régulière .NET pour l'analyse d'expressions régulières

(?<TICKER>[A-Z]+)(?<SPACE>\\s)(?<MONTH_ALPHA_ABBREV>Jan|Feb|Mar|Apr|May|Jun|Jul|Sep|Oct|Nov|Dec)(?<SPACE>\\s)(?<DAY>\\d+)(?<SPACE>\\s)(?<YEAR_LONG>[2][0][0-9][0-9])(?<SPACE>\\s)(?<STRIKE_DOLLAR>\\d+(?=[.]))[.](?<STRIKE_DECIMAL>(?<=[.])\\d+)(?<SPACE>\\s)(?<PUTCALL_LONG>Call|Put) 

Et je veux obtenir pour tous les matchs des noms de groupe et tous les éléments entre crochets (y compris les crochets) en dehors de la parenthèse ouverte et fermée. J'ai cette regex:

((?<=[<])([A-Z]|[_])+(?=[>]))|(\\[.\\]) 

Mais cela renvoie les éléments de crochet entre parenthèses. Pour ces plus spécifiques sont les matches que je veux de la regex en haut (garder à l'esprit ce doit être flexible pour tout regex):

TICKER 
SPACE 
MONTH_ALPHA_ABBREV 
SPACE 
DAY 
SPACE 
YEAR_LONG 
SPACE 
STRIKE_DOLLAR 
[.] 
STRIKE_DECIMAL 
SPACE 
PUTCALL_LONG 
+0

@Chris: FYI, les expressions régulières ne font pas partie du langage C# - elles font partie du .NET Framework. –

+2

"meta regex"! mec, vous avez mal à la tête ... –

+0

Vous est-il venu à l'esprit que les expressions régulières * décrivent * une langue ordinaire? Ce qui signifie qu'ils ne peuvent pas être * eux-mêmes * une langue régulière. Le traitement d'expressions régulières avec des expressions régulières n'est donc pas possible. – Tomalak

Répondre

2
((?<=[<])([A-Z]|[_])+(?=[>]))|(?<!\([^\)]*)\[[^\]]+\] 

Aussi, utilisez la notation @"" de sorte que vous ne devez pas les backslashs (comme vous l'avez fait dans votre exemple de code). Ce chiot est assez illisible.

0

Lorsque vous correspondez votre regex vous pouvez définir les options pour inclure RegexOptions.ExplicitCapture qui ne capturera que les groupes nommés normalement tout ce qui est entre parenthèses est capturé. Ensuite, vous pouvez nommer tous vos groupes de capture en utilisant ce format (?<captureGroupName>[insertRegExHere]). Cela vous permet de capturer ce que vous voulez et d'utiliser des noms sensés.

Questions connexes