2010-01-13 7 views
6

Entfernen brauche ich eine Zeichenfolge zu analysieren, so sollte das Ergebnis Ausgabe wie folgt aus:Regex Doppel/Dreifach Komma in String

"abc,def,ghi,klm,nop" 

Aber die Zeichenfolge konnte ich empfange das sieht eher wie:

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

Der Punkt ist, ich weiß nicht im Voraus, wie viele Kommas die Wörter trennt.
Gibt es eine Regex, die ich in C# verwenden könnte, die mir helfen könnte, dieses Problem zu lösen?

Antwort

10

Sie können den Ausdruck ,{2,} verwenden, um Vorkommen von 2 oder mehr Kommas zu finden und sie dann durch ein einzelnes Komma zu ersetzen.

Sie benötigen wahrscheinlich auch einen Trim Anruf, um alle führenden oder nachgestellten Kommas aus dem Regex.Replace Anruf zu entfernen. (Es ist möglich, dass es irgendeine Art und Weise, dies zu tun mit nur einem regex ersetzen, aber nichts springt sofort in den Sinn.)

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

Dank Luke, es macht den ziemlich gut Trick! – MissRaphie

6

Suchen Sie nach ,,+ und ersetzen Sie alle durch ,.

So in C#, die wie

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

,,+ bedeutet „entsprechen alle Vorkommen von zwei Kommata oder mehr“, so einzelne Kommata berührt werden nicht sehen konnte. Dies kann auch als ,{2,} geschrieben werden.

3

eine einfache Lösung ohne reguläre Ausdrücke:

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

Gut zu wissen, dass diese Lösung! Vielen Dank ! – MissRaphie

2

Eigentlich kann man tun es ohne irgendwelche Trimmanrufe.

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

sollte den Trick tun.

Die Idee hinter der Regex ist, nur das, was wir entfernen möchten, zu entsprechen. Der erste Teil entspricht einer beliebigen Zeichenfolge aufeinanderfolgender Kommas am Anfang der Eingabezeichenfolge, die zweite stimmt mit einer fortlaufenden Komma am Ende überein, während die letzte mit einer fortlaufenden Zeichenfolge von Komma nach einem Komma übereinstimmt.

1

Hier ist meine Mühe:

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