2016-07-28 9 views
1

У меня есть следующее регулярное выражение, которое соответствует словам внутри двойных квадратов брекета:Regex точного совпадение слов в двойных квадратных скобках

@"(?<=\[\[)[^]]+(?=\])"  

Проблема: Я хочу заменить на входе

[[Hello]] -> Foo 
[[HelloWorld]] -> Bar 

код является следующим:

message = message.Replace(match.Value, value.ToString()); 
message = Regex.Replace(message, @"[\[\]']+", ""); 

На выходе я получаю FooWorld. Как мне изменить мое регулярное выражение, чтобы получить Foo и Bar?

+1

Просто 'message = message.Replace (" [["," ") .Replace ("]] "," ")' sho uld будет достаточно. –

+0

Пожалуйста, подтвердите, что вам не нужно заменять, но просто чтобы собрать все строки внутри '[[' и ']]'. Что касается меня, * Проблема: я хочу заменить на вход *, этот вопрос отличается от [* Поиск ключей в строке, заключенной в '[[]]' *] (http://stackoverflow.com/questions/38030692/finding- ключи-в-строки-вложенный с). –

+0

Поскольку вышеупомянутый ответ предоставляет решение * extract *, и для этого требуется * замена * одного, вопрос должен быть вновь открыт. –

ответ

1

Ваше регулярное выражение @"(?<=\[\[)[^]]+(?=\])" спички 1+ кроме ] символов, начинающейся с [[ и затем с ]. Это не соответствует строкам [[x x x]]. Он даже не соответствовал бы строкам [[x y ] bracket ]].

Вы могли бы добиться того, что вам нужно с @"\[\[(.*?)]]" регулярных выражений (с использованием RegexOptions.Singleline флага), и заменяя $1:

message = Regex.Replace("[[Hello]]", @"\[\[(.*?)]]", "$1")); 

Смотрите IDEONE demo

Однако, учитывая текущие требования (или их отсутствие) вы можете просто использовать

message = message.Replace("[[", "").Replace("]]", "");