正则表达式匹配双方括号中的确切单词

时间:2016-07-28 09:46:56

标签: c# regex

我有一个以下正则表达式,它匹配双括号内的单词:

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

问题: 我想替换输入

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

代码如下:

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

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

1 个答案:

答案 0 :(得分:1)

您的正则表达式@"(?<=\[\[)[^]]+(?=\])"匹配]以外的1个以上字符(如果前面有[[,后跟])。它与[[x x x]]不匹配 - 就像字符串一样。它甚至不会匹配[[x y ] bracket ]] - 就像字符串一样。

您可以使用@"\[\[(.*?)]]"正则表达式(使用RegexOptions.Singleline标记)获得所需内容,并替换为$1

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

请参阅IDEONE demo

但是,根据您当前的要求(或缺席),您可以使用

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