替换方括号内的整个单词

时间:2016-05-18 07:50:46

标签: c# regex

除了[]

外,我怎样才能使用正则表达式\ b边界

我的测试输入是 -

" exec [exec]
[ exec]
exec
exec 
exec   
exec
       exec 
(exec
exec)
(exec)"

我想要的输出,看起来像这样 -

" EXECUTE [exec]
[ exec]
EXECUTE
EXECUTE 
EXECUTE   
EXECUTE
       EXECUTE 
(EXECUTE
EXECUTE)
(EXECUTE)"

我使用的正则表达式是 - (?<!\[)(\s+)(\b)exec(\b) 替换字符串是 - $1EXECUTE

我得到的输出是 -

" EXECUTE [exec]
[ exec]
EXECUTE
EXECUTE 
EXECUTE   
EXECUTE
       EXECUTE 
(exec
EXECUTE)
(exec)"

请帮助......

Thancks Sharon

2 个答案:

答案 0 :(得分:1)

尝试使用此正则表达式:(?!<\[\s*)\bexec(?!\]\s*),它使用否定前瞻来检查[周围是否有]exec括号。阅读:http://www.regular-expressions.info/lookaround.html

答案 1 :(得分:0)

您可以捕获括号内的字符串,并使用匹配评估程序在替换中恢复它们:

Regex.Replace(input, @"(\[[^][]*])|\bexec\b",
       m => m.Groups[1].Success ? m.Groups[1].Value : "EXECUTE");

请参阅IDEONE demo

var input = " exec [exec]\n[ exec]\nexec\nexec \nexec   \nexec\n       exec \n(exec\nexec)\n(exec)"; 
var result = Regex.Replace(input, @"(\[[^][]*])|\bexec\b",
            m => m.Groups[1].Success ? m.Groups[1].Value : "EXECUTE");
Console.WriteLine(result);

(\[[^][]*])|\bexec\b正则表达式会使用[...]将所有(\[[^][]*])字符串捕获到第1组,然后匹配整个字exec。匹配后,我们会检查第1组是否与m.Groups[1].Success匹配。如果是,请将其插回,如果没有,请替换为EXECUTE