How about this:
string input = "Hello {0}, please refer for more information {or contact us at: XXXX}";
Regex rgx = new Regex("(\\{(?!\\d+})[^}]+})");
string replacement = "{$1}";
string result = rgx.Replace(input, replacement);
Console.WriteLine("String {0}", result);
... assuming that the only lines that should not be escaped have a format {\d+}.
There are two caveats here. First, we may run into already runaway curvy braces - {{. This is easier to fix: add more hits ...
Regex rgx = new Regex("(\\{(?!\\d+})(?!\\{)(?<!\\{\\{)[^}]+})");
... in other words, when trying to replace the bracket, make sure that it is alone. )
-, , , , , . , beasty , , } :
Regex rgx = new Regex("(\\{(?!\\d\\S*})(?!\\{)(?<!\\{\\{)[^}]+})");
, , (, ), , .
: , , { }, - , :
Regex firstPass = new Regex("(\\{(?!\\d+[^} ]*}))");
string firstPassEscape = "{$1";
...
Regex secondPass = new Regex("((?<!\\{\\d+[^} ]*)})");
string secondPassEscape = "$1}";