using System;
using System.IO;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var s = "'This is not captured' but this is and not or empty() notempty() currentdate() capture";
var rx = new Regex(@"(?:'[^']*'|(?:\b(?:(?:not)?empty|currentdate)\(\)|and|or|not))|([!@#$%^&*_.\w-]+)");
Console.WriteLine(rx.Replace(s, repl));
}
public static string repl(Match m)
{
return !string.IsNullOrEmpty(m.Groups[1].Value) ? m.Value.Replace(m.Groups[1].Value, string.Format("'{0}'", m.Groups[1].Value)) : m.Value;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uSU87CnVzaW5nIFN5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9uczsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgcyA9ICInVGhpcyBpcyBub3QgY2FwdHVyZWQnIGJ1dCB0aGlzIGlzIGFuZCBub3Qgb3IgZW1wdHkoKSBub3RlbXB0eSgpIGN1cnJlbnRkYXRlKCkgY2FwdHVyZSI7CgkJdmFyIHJ4ID0gbmV3IFJlZ2V4KEAiKD86J1teJ10qJ3woPzpcYig/Oig/Om5vdCk/ZW1wdHl8Y3VycmVudGRhdGUpXChcKXxhbmR8b3J8bm90KSl8KFshQCMkJV4mKl8uXHctXSspIik7CgkJQ29uc29sZS5Xcml0ZUxpbmUocnguUmVwbGFjZShzLCByZXBsKSk7Cgl9CglwdWJsaWMgc3RhdGljIHN0cmluZyByZXBsKE1hdGNoIG0pCgl7CgkJcmV0dXJuICFzdHJpbmcuSXNOdWxsT3JFbXB0eShtLkdyb3Vwc1sxXS5WYWx1ZSkgPyBtLlZhbHVlLlJlcGxhY2UobS5Hcm91cHNbMV0uVmFsdWUsIHN0cmluZy5Gb3JtYXQoIid7MH0nIiwgbS5Hcm91cHNbMV0uVmFsdWUpKSA6IG0uVmFsdWU7Cgl9Cn0=