Maison > Java > javaDidacticiel > Comment diviser du texte séparé par des virgules avec des guillemets à l'aide d'expressions régulières ?

Comment diviser du texte séparé par des virgules avec des guillemets à l'aide d'expressions régulières ?

Barbara Streisand
Libérer: 2024-12-02 01:15:10
original
512 Les gens l'ont consulté

How to Split Comma-Separated Text with Quotes Using Regular Expressions?

Diviser le texte séparé par des virgules avec des guillemets

Dans certains scénarios où les données textuelles contiennent des valeurs séparées par des virgules, il devient nécessaire de diviser les données basé sur des virgules. Cependant, des défis surviennent lorsque les données contiennent des chaînes avec des virgules intégrées entre guillemets.

Pour résoudre ce problème, une solution polyvalente consiste à utiliser une expression régulière qui cible spécifiquement les virgules situées en dehors des guillemets :

str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Copier après la connexion

Disséquer cette expression régulière :

  • :, représente la virgule cible entre les données valeurs.
  • (?=...$) est une assertion anticipée, indiquant que la virgule doit être suivie de l'expression restante.
  • (?:[^"]*"[^"]*")* correspond à zéro ou plusieurs répétitions de paires de guillemets doubles, garantissant que toutes les virgules incorporées sont exclues du split.
  • [^"]* correspond à tout caractère autre que les guillemets après le dernier guillemet ou le début de la chaîne.

Alternativement, le la même expression régulière peut être écrite dans un format plus lisible à l'aide du modificateur (? X), qui permet d'améliorer les expressions multilignes lisibilité :

String[] arr = str.split("(?x)   " + 
                     ",          " +   // Split on comma
                     "(?=        " +   // Followed by
                     "  (?:      " +   // Start a non-capture group
                     "    [^\"]* " +   // 0 or more non-quote characters
                     "    \"     " +   // 1 quote
                     "    [^\"]* " +   // 0 or more non-quote characters
                     "    \"     " +   // 1 quote
                     "  )*       " +   // 0 or more repetition of non-capture group (multiple of 2 quotes will be even)
                     "  [^\"]*   " +   // Finally 0 or more non-quotes
                     "  $        " +   // Till the end  (This is necessary, else every comma will satisfy the condition)
                     ")          "     // End look-ahead
                         );
Copier après la connexion

Cette solution résout efficacement le problème du fractionnement du texte séparé par des virgules tout en préservant l'intégrité des chaînes contenant des virgules entre guillemets doubles.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal