除了[]
外,我怎样才能使用正则表达式\ 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
答案 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
。