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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top