Comment extraire tous les {} jetons d'une chaîne à l'aide de RegEx .Net?
Question
Je dois extraire des marques marquées par des accolades d'une chaîne donnée.
J'ai essayé d'utiliser Expresso pour construire quelque chose qui va analyser ...
-------------------------------------------------------------
"{Token1}asdasasd{Token2}asd asdacscadase dfb db {Token3}"
-------------------------------------------------------------
et produit & "Token1 &"; & "Token2 &"; & "Token3 &";
J'ai essayé d'utiliser ..
-------------------------------------------------------------
({.+})
-------------------------------------------------------------
... mais cela semblait correspondre à l'expression entière.
Avez-vous des idées?
La solution
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).
Autres conseils
Essayez:
\{([^}]*)\}
Ceci bloquera la recherche à l'intérieur des accolades ondulées pour s'arrêter sur l'accolade fermante.
Une autre solution:
(?<=\{)([^\}]+)(?=\})
Ceci utilise un lookahead et un lookbehind afin que les crochets ne soient pas consommés du tout.
Les accolades ont une signification particulière dans les expressions régulières, vous devez donc y échapper. Utilisez \{
et \}
pour les comparer.