2016-07-28 76 views
1

我有以下的正则表达式,它匹配双托架正方形内的话:正则表达式到在双方括号精确匹配词语

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

问题: 我想在输入更换

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

代码如下:

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

在输出中,我收到FooWorld。我应该如何修改我的正则表达式来获得Foo和Bar?

+1

只是'message = message.Replace(“[[”,“”).Replace(“]]”,“”)'sho就够了。 –

+0

请确认您不需要替换,只是为了收集'[['和']]'中的所有字符串。至于我,*问题:我想替换输入*使这个问题不同于[*在字符串中查找键[']]'*](http://stackoverflow.com/questions/38030692/finding-键合串封闭-带)。 –

+0

由于上面提到的答案提供*提取*解决方案,并且这个解决方案需要*替换*一个,所以应该重新打开问题。 –

回答

1

您的正则表达式@"(?<=\[\[)[^]]+(?=\])"]以外的其他1个字符匹配,前提是[[后跟]。它并不真正匹配[[x x x]]类似的字符串。它甚至不会匹配类似[[x y ] bracket ]]的字符串。

你可以实现你需要@"\[\[(.*?)]]"正则表达式(使用RegexOptions.Singleline标志)的东西,并与$1更换:

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

IDEONE demo

然而,考虑到当前的需求(或缺席)你可以使用

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