2016-07-20 7 views
0

Ich habe folgende ZeichenfolgeRegex String sollte doppelte Anführungszeichen enthalten und durch Komma getrennt Zahlen nur

"56565665,5656565,5656556" 

Ich möchte nur prüfen, ob die Zeichenfolge nur doppelte Anführungszeichen, Komma und Zahlen enthalten.

dafür habe ich versucht, eine Regex ^"\d+\, zu erstellen, aber es wählt nur erste Zeichenfolge.

Ich bin neu zu regex vollständig.

+0

Zuerst müssen Sie die gültigen und ungültigen Spiele denken. Regexp wird vollständig davon abhängen. Zum Beispiel gute Übereinstimmungen: "12", "1", "1,2", "123,123", "1,1,1,1". Schlechte Treffer: "", "", "12", "1,2", "s", "12,12", "" und so weiter. – akarilimano

+1

Einige handliche Testfälle wären "" "," 1 "5,87" "," 56, 76 "," 8766,87 ". Ich würde '@" verwenden \ A "" [0-9] + (?:, [0-9] +) * "" \ z "' –

+0

Und was ist mit einer leeren Zeichenfolge? Regexes sind sehr zerbrechlich und "funktionieren" nur dann, wenn vorher ein vollständiger Satz von Anforderungen bekannt ist. –

Antwort

3

können Sie verwenden ^"[\d,]+"$

sehen sie hier auf regex101

In C# es aussehen würde wie diese durch austretendes Zeichen

using System.Text.RegularExpressions 
... 
Console.WriteLine(Regex.IsMatch(@"""56565665,5656565,5656556""", @"^""[\d,]+""$")); 
Console.WriteLine(Regex.IsMatch(@"""56565665,5656565;5656556""", @"^""[\d,]+""$")); 

-Update aufgrund Frage in den Kommentaren darüber, wie um es mit einer Variablen zu verwenden:

var str = @"""56565665,5656565,5656556"""; 
// var str = "\"56565665,5656565,5656556\""; <- Alternative way of escaping " 

Console.WriteLine(Regex.IsMatch(str, @"^""[\d,]+""$")) 
+0

und wie verwende ich das? 'var pattern ="^"[\ d,] +" $ "; // Diese Zeile gibt den Fehler –

+1

'var pattern = @"^"" [\ d,] + "" $ ";' –

+1

Nur eine Anmerkung: '\ d' passt' [0-9] ', Hindi, Arabisch und Was-nicht-Ziffern in .NET. Um nur 0-9 mit "\ d" zu vergleichen, kompilieren Sie die Regex mit dem Flag "RegexOptions.ECMAScript". –

1

Versuchen Sie dies, hoffen, dass dies arbeiten "^ [0-9] + $"

1

Sie können das Muster unten probieren:

^"[0-9]+(,[0-9]+)*"$ 

oder sogar

\A"[0-9]+(,[0-9]+)*"\z // Wiktor Stribiżew's idea, see his comment below 

Z.B.

string source = @"""123,456,789"""; 
string pattern = @"\A""[0-9]+(,[0-9]+)*""\z"; 

bool result = Regex.IsMatch(source, pattern); 

Tests:

"123"  - true // just a number 
"123,456" - true // two numbers separated by comma 
"1,2,3,4" - true // four numbers separated by comma 
","   - false // just a comma, no numbers 
",123"  - false // leading comma 
"123,"  - false // trailing comma 
"123,,456" - false // double comma 
+0

Vielen Dank für Ihre wertvolle Antwort mit Erläuterungen! –

+1

Dima, das ist mein Vorschlag. Ich würde einfach die Anker '\ A' und' \ z' verwenden, um sicherzustellen, dass meine Saite nicht mit einem LF endet. Ihre Regex erlaubt '" 12,23 \ n "' –

+0

@Wiktor Stribiżew: Danke! Netter Fang des subtilen Fehlers; Ich habe den Anser bearbeitet. –

Verwandte Themen