Utiliser des expressions régulières pour diviser des chaînes en C# : traiter des virgules entre guillemets
Dans divers scénarios tels que l'analyse de données ou les opérations de chaîne SQL, les chaînes contenant des virgules peuvent devoir être divisées à l'aide d'expressions régulières. Cependant, des problèmes surviennent lorsque des virgules apparaissent à l’intérieur et à l’extérieur des guillemets.
Considérons la chaîne suivante :
<code>('ABCDEFG', 123542, 'XYZ 99,9')</code>
Notre objectif est de diviser cette chaîne en ses composants à l'aide d'expressions régulières afin d'obtenir le résultat suivant :
La clé est de reconnaître les virgules en dehors des guillemets. Pour cela, nous pouvons utiliser le puissant modèle d'expression régulière :
<code>",(?=(?:[^']*'[^']*')*[^']*$)"</code>
Décomposons ce modèle :
"
: correspond à une virgule littérale.
(?=(?:[^']*'[^']*')*[^']*$)
: Il s'agit d'une assertion anticipée qui vérifie si une virgule est suivie d'un nombre pair de guillemets.
(?:[^']*'[^']*')*
: fait correspondre n'importe quel nombre de paires de guillemets simples avec le contenu entre eux. [^']*$
: correspond à n’importe quel caractère après le dernier guillemet, mais sans compter le guillemet. En utilisant ce modèle, nous pouvons faire correspondre n'importe quelle virgule suivie d'un nombre pair de guillemets, garantissant ainsi que nous ne divisons la chaîne qu'en dehors des guillemets.
Pour utiliser cette expression régulière pour le fractionnement, nous utiliserons le code C# suivant :
<code class="language-csharp">var result = Regex.Split(samplestring, ",(?=(?:[^']*'[^']*')*[^']*$)");</code>
Après avoir exécuté ce code, result
contiendra un tableau de chaînes, chaque chaîne représentant un composant de la chaîne d'origine, divisée selon les conditions souhaitées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!