C# 使用正则表达式替换转换表达式

C# 使用正则表达式替换转换表达式,c#,regex,C#,Regex,是否可以像这样转换表达式 {op1 == op2, #} && {op3 > op4, 1, 2} && op5 == op6 var st = "{op1 == op2, #} && {op3 > op4, 1, 2} && op5 == op6"; var regex = "{.*?}"; for (var match = Regex.Match(st, regex); match.Success; match

是否可以像这样转换表达式

{op1 == op2, #} && {op3 > op4, 1, 2} && op5 == op6
var st = "{op1 == op2, #} && {op3 > op4, 1, 2} && op5 == op6";

var regex = "{.*?}";
for (var match = Regex.Match(st, regex); match.Success; match = Regex.Match(st, regex))
{
    var oldString = match.Value; // {op1 == op2, #} 

    var op = oldString.Split(' ').ToList()[1].Trim(); // == 
    var csv = oldString.Split(',').Select(x => x.Trim()).ToList(); // [0] = "{op1 == op2" [1] = "#}"

    var expression = csv[0].Remove(0,1); // op1 == op2
    csv.RemoveAt(0);

    var extension = "_" + String.Join("_", csv);
    extension = extension.Remove(extension.Length-1); // _#

    var newString = expression.Replace(op, op + extension);

    st = st.Replace(oldString, newString); 
}

var st = "{op1 == op2, #} && {op3 > op4, 1, 2} && op5 == op6";

var regex = "{.*?}";
for (var match = Regex.Match(st, regex); match.Success; match = Regex.Match(st, regex))
{
    var oldString = match.Value; // {op1 == op2, #} 

    var op = oldString.Split(' ').ToList()[1].Trim(); // == 
    var csv = oldString.Split(',').Select(x => x.Trim()).ToList(); // [0] = "{op1 == op2" [1] = "#}"

    var expression = csv[0].Remove(0,1); // op1 == op2
    csv.RemoveAt(0);

    var extension = "_" + String.Join("_", csv);
    extension = extension.Remove(extension.Length-1); // _#

    var newString = expression.Replace(op, op + extension);

    st = st.Replace(oldString, newString); 
}

因此,逗号后面的所有出现都应该在运算符(=,>,后面用下划线隔开。在Qtax的注释之后,我刚刚写了一个解决方案:

var st = "{op1 == op2, #} && {op3 > op4, 1, 2} && op5 == op6";

var regex = "{.*?}";
for (var match = Regex.Match(st, regex); match.Success; match = Regex.Match(st, regex))
{
    var oldString = match.Value; // {op1 == op2, #} 

    var op = oldString.Split(' ').ToList()[1].Trim(); // == 
    var csv = oldString.Split(',').Select(x => x.Trim()).ToList(); // [0] = "{op1 == op2" [1] = "#}"

    var expression = csv[0].Remove(0,1); // op1 == op2
    csv.RemoveAt(0);

    var extension = "_" + String.Join("_", csv);
    extension = extension.Remove(extension.Length-1); // _#

    var newString = expression.Replace(op, op + extension);

    st = st.Replace(oldString, newString); 
}

你用的是哪种语言?这在正则表达式中是不容易做到的。至少不能一次完成。