2010-01-13 6 views
6

tengo que analizar una cadena así que el resultado debe ser la salida de esa manera:Regex eliminación triple doble coma/en cadena

"abc,def,ghi,klm,nop" 

Pero la cadena de recibo podría parece más a que:

",,,abc,,def,ghi,,,,,,,,,klm,,,nop" 

El punto es que no sé de antemano cuántas comas separan las palabras.
¿Hay alguna expresión regular que pueda usar en C# que pueda ayudarme a resolver este problema?

Respuesta

10

Puede usar la expresión ,{2,} para hacer coincidir cualquier aparición de 2 o más comas, y luego reemplazarlas con una coma simple.

Es probable que también necesite una llamada Trim para eliminar cualquier coman anterior o posterior de la llamada Regex.Replace. (Es posible que haya alguna manera de hacer esto con sólo una expresión regular reemplazar, pero nada de inmediato viene a la mente.)

string goodString = Regex.Replace(badString, ",{2,}", ",").Trim(','); 
+0

Gracias Lucas, que hace el truco muy bien! – MissRaphie

6

Busque ,,+ y reemplace todo con ,.

Así que en C# que podría parecerse a

resultString = Regex.Replace(subjectString, ",,+", ","); 

,,+ significa "que coincida con todas las apariciones de dos comas o más", por lo que no serán tocados comas individuales. Esto también se puede escribir como ,{2,}.

3

una solución sencilla y sin expresiones regulares:

string items = inputString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
string result = String.Join(",", items); 
+0

¡Es bueno saber esa solución! Gracias ! – MissRaphie

2

En realidad, se puede hacer sin llamadas Trim.

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

deberían hacer el truco.

La idea detrás de la expresión regular es hacer coincidir solo eso, que queremos eliminar. La primera parte coincide con cualquier cadena de comas consecutivas al comienzo de la cadena de entrada, la segunda coincide con cualquier cadena de comas consecutivas al final, mientras que la última coincide con una cadena de comas consecutivas que sigue una coma.

1

Aquí es mi esfuerzo:

//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