2010-12-13 31 views

Répondre

1

Cela devrait fonctionner pour vous:

^\{[^ ,]+(, [^ ,]+)*\}$ 

En supposant que votre liste contient au moins un élément et chaque élément est suivi d'une virgule et un espace (« »). Si vous souhaitez que chaque élément soit suivi d'une virgule, utilisez la solution jjnguy's.

Voilà ma tentative d'explication à ce qui se passe dans ce modèle:

  • L'expression correspond à tout ce qui [^]n'a pas suivre le caret ^. Donc, [^ ,] correspondra à tout sauf pour un espace ou une virgule.
  • + signifie "faire correspondre l'élément précédent 1 fois ou plus". Donc, [^ ,]+ correspondra à n'importe quelle séquence de caractères qui ne contient pas une virgule ou un espace.
  • * signifie «correspondre à la précédente 0 fois ou plus». Ainsi, (, [^ ,]+)* correspondra à 0 ou plusieurs occurrences du modèle , [^ ,]+ - une séquence commençant par une virgule et un espace, suivie d'une séquence d'au moins un caractère (qui ne contient aucune virgule ni aucun espace).
  • Le fait de tout emballer dans ^\{ et \}$ garantit que la ficelle commence par une entretoise gauche et se termine par une entretoise droite.

Voir this page pour une "feuille de triche" utile sur les expressions régulières.

+0

J'ai corrigé l'orthographe du nom de _jjnguy_. J'espère que je n'ai pas dérangé avec les modifications que vous étiez en train de faire. –

+0

@Jeff M jjnguy, gotcha - Je blâme le croc :) Pas de soucis; J'essayais juste de clarifier ce troisième point. – Donut

+0

Bravo pour l'expression et commentaires utiles et le lien! –

1

Ce qui suit (devrait) doit correspondre à un nombre quelconque de séquences de caractères séparées par des virgules et placées entre accolades.

@"\{([^,]+,)*([^,]+)\}" 

Ceci suppose que la liste contiendra toujours un élément.

0

Je préférerais:

String src = "{one, two, three}"; 
String[] result = src.Substring(1, src.Length - 2).Split(", ");