Как извлечь все токены {} из строки с помощью регулярного выражения .Net?

Мне нужно извлечь токены, отмеченные фигурными скобками, из заданной строки.

Я попытался использовать Expresso для создания чего-то, что будет анализировать...

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

и произвести "Token1", "Token2", "Token3"

пробовал использовать..

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

... но это, казалось, соответствовало всему выражению.

есть идеи?


person Rory Becker    schedule 29.01.2009    source источник


Ответы (4)


Пытаться

\{(.*?)\}
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). 
person Godeke    schedule 29.01.2009

Пытаться:

\{([^}]*)\}

Это остановит поиск внутри волнистых фигурных скобок, чтобы остановиться на закрывающей скобке.

person user7116    schedule 29.01.2009
comment
Бежать или нет... вот главный вопрос! ;-) - person Cerebrus; 29.01.2009
comment
Вам не нужно экранировать } в классе символов, если вы это имеете в виду. Кроме того, это немного более читабельно (с точки зрения намерений), чем нежадный .* - person user7116; 29.01.2009

Другое решение:

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

Это использует просмотр вперед и просмотр назад, поэтому скобки вообще не используются.

person Evan Fosmark    schedule 29.01.2009

Фигурные скобки имеют особое значение в регулярных выражениях, поэтому их необходимо избегать. Используйте \{ и \}, чтобы сопоставить их.

person Brian Rasmussen    schedule 29.01.2009
comment
При голосовании против, пожалуйста, оставьте комментарий. Спасибо. - person Brian Rasmussen; 19.04.2014