J'essaie de créer un modèle qui me permet de diviser une chaîne sur les virgules mais en ignorant les expressions entre accolades.Séparations de chaînes d'expressions régulières
mon code existant fonctionne très bien si un seul groupe d'expressions accolades existe dans la chaîne.
Dim expression As New Regex(",(?=(?:[^\{]*\{[^\{]*\})*(?![^\}]*\}))")
Try
parts = expression.Split(sortString)
For Each Item In parts
If Not Item Is Nothing Then
result.Add(Item)
End If
Next
Return result
Si je passe la chaîne
{IIF(Hemo.Site = "LV",1,IIF(Hemo.Site = "SVC",2,IIF(Hemo_Pressures.Site = "AO",3,4)))},Site DESC,Pressure1 ASC
Il fonctionne, le groupement Accolade est ignorée et chaque chaîne après est rompu avec la scission de coma.
Le problème est. Si j'ai besoin d'accueillir plusieurs groupes d'expressions de crochet dans ma chaîne et qu'il commence à échouer.
Cela échoue:
{IIF(Hemo.Site = "LV",1,IIF(Hemo.Site = "SVC",2,IIF(Hemo_Pressures.Site = "AO",3,4)))},Site DESC,{IIF(Hemo.Site = "LV",1,IIF(Hemo.Site = "SVC",2,IIF(Hemo.Site = "AO",3,4)))}, Pressure1 ASC
un du groupement est ignoré comme il devrait être, mais l'autre groupe de accolades n'est pas. Résultant d'une collection sale.
J'apprécierais une deuxième paire d'yeux sur ceci.
Essayez ceci ', (?! [^ {] * \})'. Je n'ai pas fait de tests exhaustifs, mais cela semble fonctionner pour moi. –
Fonctionne parfaitement ... beaucoup plus élégante que mon modèle merci. –
J'ai trouvé quelques problèmes s'il y a un texte contenant '}' entre les virgules qu'il devrait séparer, par exemple '1,2, {1,2,3}, 4,5,} 6' ne se divise pas correctement. J'espère que ce ne sera pas un problème pour vous. –