2016-07-28 77 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("]]", "");