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
Barbara Streisandoriginal
2024-12-02 01:15:10460parcourir

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(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

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
                         );

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!

Déclaration:
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