Wie extrahiere ich alle {} aus einem String-Token .Net RegEx verwenden?
Frage
Ich brauche Token zu extrahieren, die mit geschweiften Klammern aus einer bestimmten Zeichenkette markiert sind.
Ich habe versucht, Expresso mit etwas zu konstruieren, analysieren wird ...
-------------------------------------------------------------
"{Token1}asdasasd{Token2}asd asdacscadase dfb db {Token3}"
-------------------------------------------------------------
und produzieren "Token1", "Token2", "Token3"
Ich habe versucht, mit ..
-------------------------------------------------------------
({.+})
-------------------------------------------------------------
... aber das schien den gesamten Ausdruck zu entsprechen.
Alle Gedanken?
Lösung
Versuchen
\{(.*?)\}
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).
Andere Tipps
Versuchen:
\{([^}]*)\}
Das wird die Suche klemmt innerhalb von verschnörkelten Zahnspange auf der schließende Klammer zu stoppen.
Eine andere Lösung:
(?<=\{)([^\}]+)(?=\})
Dieses verwendet einen Look-Ahead und ein Lookbehind so die Klammern überhaupt nicht verbraucht wird.
Curly Klammern haben eine besondere Bedeutung in regulären Ausdrücken, damit Sie sie entkommen. Verwenden Sie \{
und \}
ihnen zu passen.