8
votes

Regex retirer double / triple virgule dans la chaîne

J'ai besoin d'analyser une chaîne afin que le résultat soit sorti de celui-ci: xxx

mais la chaîne que je reçoive pourrait ressembler davantage à ce que: xxx

Le point est, je ne sais pas à l'avance combien de virgules séparent les mots.
Y a-t-il une regex que je pourrais utiliser dans c # qui pourrait m'aider à résoudre ce problème?


0 commentaires

5 Réponses :


6
votes

Rechercher , + et remplacer tout avec , .

donc en C # qui pourrait ressembler à xxx

, + signifie "correspondre à toutes les occurrences de deux virgules ou plus", de sorte que les virgules simples ne seront pas touchées. Cela peut également être écrit comme , {2,} .


0 commentaires

11
votes

Vous pouvez utiliser l'expression , {2,} pour correspondre à toutes les occurrences de 2 virgules ou plus, puis remplacez-les par une seule virgule.

Vous aurez probablement besoin d'un Coupez Appelez-le aussi, pour supprimer les virgules de premier plan ou de fuite à gauche de la Regex.replace appel. (Il est possible qu'il y ait une bonne façon de le faire avec une regrette de regérer, mais rien ne me ressort immédiatement.) xxx


0 commentaires

4
votes

Une solution simple sans expressions régulières: xxx


1 commentaires

Bon à savoir cette solution! Merci !



2
votes

En réalité, vous pouvez le faire sans appels de garniture.

text = Regex.Replace(text, "^,+|,+$|(?<=,),+", "");


0 commentaires

1
votes

Voici mon effort:

//Below is the test string 
string test = "YK     002       10        23           30         5       TDP_XYZ  "
private static string return_with_comma(string line)
    {
        line = line.TrimEnd();
        line = line.Replace("  ", ",");
        line = Regex.Replace(line, ",,+", ",");
        string[] array;
        array = line.Split(',');
        for (int x = 0; x < array.Length; x++)
        {
            line += array[x].Trim();
        }
        line += "\r\n";
        return line;
    }
 string result = return_with_comma(test);
 //Output is
 //YK,002,10,23,30,5,TDP_XYZ  


0 commentaires