Возможное решение с использованием регулярных выражений.Это не самый чистый, но вы могли бы пойти отсюда.
string process(string s)
{
string ret = "";
System.Text.RegularExpressions.Regex r = new Regex(@"X\(([A-Z]+)\)~([^,]+)\,?");
bool first = true;
foreach (Match m in r.Matches(s))
{
ret += (first ? "" : ",") + m.Groups[1] + "(curr=" + m.Groups[2] + ")";
first = false;
}
return ret;
}