Как найти все соединительные скобки с регулярным выражением? - PullRequest
0 голосов
/ 13 ноября 2009

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

Например, я хочу заменить " {foo} " на " FOO " и " {bar} " на " BAR"и" {}"с" EMPTY". Если вход « abc {foo} def {bar} {} », то вывод « abc FOO def BAR EMPTY ».

Вложенные скобки или несвязанные скобки не допускаются. Если необходим символ "{" или "}". Это должно быть удвоено. Итак, "{{def}}" это просто "{def}".

Другие строки в {} недопустимы. Скажем, я просто хочу " {foo} " и " {bar} ". Таким образом, « abc {xyz} def » должен быть распознан как неверный ввод.

Ответы [ 2 ]

3 голосов
/ 13 ноября 2009

Если у вас есть отрицательные взгляды / взгляды:

(?<!{){([a-z]+)}(?!})

и замените значением соответствующей группы.

([a-z]+) соответствует вашей содержащейся строке символов, (?<!{) гарантирует, что нет секунды { перед вашим {, а (?!}) гарантирует, что второй } нет после вашего }.

Если у вас нет взглядов / взглядов, то

(?^|[^{]){([a-z]+)}(?$|[^})
0 голосов
/ 13 ноября 2009

Сначала я бы заменил {} на EMPTY без использования регулярного выражения.

Тогда используйте

(?<!{){(foo|bar)}(?!})

для соответствия {foo} или {bar}, но не {} или {{anything}} или {anything}

Номер обратной ссылки. 1 содержит совпавший текст.

Так что фрагмент кода может выглядеть как

Regex matches = new Regex(@"(?<!\{)\{(foo|bar)\}(?!\})", RegexOptions.IgnoreCase);
resultString = matches.Replace(subjectString, "$1".ToUpper());

(Я надеюсь, что вызов ToUpper () для строки работает; я не знаю C #, поэтому, пожалуйста, исправьте меня, если я ошибаюсь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...