2013-08-06 5 views
1

est-il possible de transformer une expression commeregex Utilisation remplacer pour transformer une expression

{op1 == op2, #} && {op3 > op4, 1, 2} && op5 == op6 

à

op1 ==_# op2 && op3 >_1_2 op4 && op5 == op6 

Ainsi, toutes les occurences après la virgule doivent être placés séparés par un soulignement après que l'opérateur (==,>, <, < =, etc ...). opX peut être n'importe quelle valeur alphanumérique.

+3

Quelle langue utilisez-vous? –

+0

J'utilise C# .Net – KasF

+2

Ce n'est pas facile avec regex. Pas en un passage au moins. – Qtax

Répondre

3

Après le commentaire de Qtax, je viens d'écrire une solution:

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); 
} 
Questions connexes