Regex.Split () sur une chaîne délimitée par des virgules, des espaces ou des points-virgules

J’essaie de scinder une chaîne qui peut être délimitée par des virgules, des espaces ou des points-virgules. Il pourrait également contenir un espace ou des espaces après chaque séparateur. Par exemple

22222,11111,23232 OR 22222, 11111, 23232 OR 22222; 11111; 23232 OR 22222 11111 23232 

N’importe lequel de ceux-ci produirait un tableau avec trois valeurs ["22222","11111","23232"]

Jusqu’à présent, j’ai var values = Regex.Split("22222, 11111, 23232", @"[\\s,;]+") mais cela produit un tableau avec les deuxième et troisième valeurs, y compris les espaces, :

 ["22222"," 11111"," 23232"] 

Vous avez deux possibilités:

  • Regex.Split
  • Ssortingng.Split

Dans ce cas, vous souhaitez scinder votre chaîne par des caractères de délimitation spécifiques. Ssortingng.Split a été créé pour cet usage spécial. Cette méthode sera plus rapide que Regex.Split .

 char[] delimiters = new [] { ',', ';', ' ' }; // List of your delimiters var splittedArray = mySsortingng.Split(delimiters, SsortingngSplitOptions.RemoveEmptyEnsortinges); 

Vous utilisez un symbole @ pour votre chaîne, le "\" est donc interprété comme une barre oblique. Donc, votre classe de personnage lit en fait un "\" , un "s" , un "," ou un ";" . Supprimez la barre oblique supplémentaire et cela devrait fonctionner comme vous le souhaitez:

 var values = Regex.Split("22222, 11111, 23232", @"[\s,;]+") 
 Regex.Split("22222, 11111, 23232", @"[ ,;]+") 

cela a fonctionné pour moi

Cochez également la réponse ci-dessous, si tout ce dont vous avez besoin est de scinder une chaîne en fonction de quelques délimiteurs de caractères – ssortingng.split est probablement une meilleure solution.

Pour interpréter “j’essaie de scinder une chaîne qui peut être délimitée par des virgules, des espaces ou des points-virgules. Elle peut également contenir un ou des espaces après chaque séparateur”, essayez littéralement:

 @"[,;]\s*|\s+" 

Cela a la propriété que les délimiteurs consécutifs (sauf les espaces blancs) ne seront pas traités comme un seul délimiteur.

Mais si vous souhaitez que tous les délimiteurs consécutifs soient traités comme un seul, vous pouvez également:

 @"[,;\s]+" 

Bien entendu, dans ce cas, ssortingng.Split est une option plus simple, comme d’autres l’ont indiqué.

Essayez ce motif Regex:

 ([^,;\"\}\{\s*.]\d+) 

Pour un exemple de texte:

 {"123","456","789"} 1011,1213,1415 16, 17, 181920 212223; 242526;27 28 29 3031 

Voir la démo .

entrez la description de l'image ici