2009-01-29 6 views
2

Je dois extraire les jetons marqués avec des accolades d'une chaîne donnée.Comment puis-je extraire tous les jetons {} d'une chaîne à l'aide de RegEx de .Net?

J'ai essayé d'utiliser Expresso pour construire quelque chose qui va analyser ...

------------------------------------------------------------- 
"{Token1}asdasasd{Token2}asd asdacscadase dfb db {Token3}" 
------------------------------------------------------------- 

et produire "token1", "Token2", "Token3"

J'ai essayé d'utiliser ..

------------------------------------------------------------- 
({.+}) 
------------------------------------------------------------- 

... mais cela semblait correspondre à l'expression entière.

Des pensées?

Répondre

6

Essayez

\{(.*?)\} 
 
The \{ will escape the "{" (which has meaning in a RegEx). 
The \} likewise escapes the closing } backet. 
The .*? will take minimal data, instead of just .* 
which is "greedy" and takes everything it can. 
 
If you have assurance that your tokens will (or need to) 
be of a specific format, you can replace .* with an appropriate 
character class. For example, in the likely case you 
want only words, you can use (\w*) in place of the (.*?) 
This has the advantage that closing } characters are not 
part of the class being matched in the inner expression, 
so you don't need the ? modifier). 
2

Essayez:

\{([^}]*)\} 

Cela serrer la recherche à l'intérieur des accolades squiggly arrêter sur l'accolade de fermeture.

+0

Pour échapper ou pas ... c'est la question clé! ;-) – Cerebrus

+0

Vous ne devriez pas avoir à échapper le} dans la classe de caractères, si c'est ce que vous voulez dire. Aussi c'est légèrement plus lisible (intention sage) qu'un ungreedy. * – user7116

1

accolades ont une signification particulière dans les expressions régulières, vous devez leur échapper. Utilisez \{ et \} pour les faire correspondre.

+0

Quand bas votant s'il vous plaît laissez un commentaire. Merci. –

2

Une autre solution:

(?<=\{)([^\}]+)(?=\}) 

Il utilise un test avant et un regard en arrière pour que les supports ne sont pas consommés du tout.

Questions connexes