Maison >Java >javaDidacticiel >Comment puis-je diviser du texte séparé par des virgules tout en conservant les guillemets ?

Comment puis-je diviser du texte séparé par des virgules tout en conservant les guillemets ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-02 02:21:10535parcourir

How Can I Split Comma-Separated Text While Preserving Quotes?

Diviser le texte à l'aide de virgules tout en préservant les guillemets

Lors de l'analyse de texte séparé par des virgules, il est important de gérer les situations dans lesquelles des virgules apparaissent dans des sous-chaînes entre guillemets, comme cet exemple :

123,test,444,"don't split, this",more test,1

Diviser cette chaîne par des virgules à l'aide du La méthode String.split(",") par défaut donne :

123
test
444
"don't split
 this"
more test
1

Comme vous pouvez le voir, la virgule dans la citation "ne pas diviser, cette" est interprétée à tort comme un séparateur.

Pour résoudre ce problème, une approche plus sophistiquée est nécessaire. Dans ce cas, nous pouvons utiliser une expression régulière pour diviser la chaîne en virgules qui ne sont pas suivies d'un nombre pair de guillemets doubles. Cela garantit que les virgules à l'intérieur des sous-chaînes entre guillemets ne sont pas confondues avec des séparateurs.

str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

Cette expression régulière utilise la logique suivante :

  • (?=) : Look-ahead assertion qui garantit :

    • (?:[^"]*"[^"]*")* : correspond à un nombre quelconque de sous-chaînes entourées de guillemets doubles.
    • [^"]* : correspond à n'importe quel nombre de caractères autres que les guillemets.
    • $ : assertion de fin de chaîne.

En d'autres termes, cette analyse anticipée vérifie si la virgule actuelle est suivie d'un nombre pair de guillemets doubles et de la fin de la chaîne If. c'est le cas, cela indique que la virgule n'est pas à l'intérieur d'une sous-chaîne entre guillemets et peut être considérée comme un séparateur. Sinon, la virgule est ignorée.

Vous pouvez également utiliser une version simplifiée de l'expression régulière :

.
str.split("(?x)  ,  (?=  (?:  [^\"]*  \"  [^\"]*  \"  )*  [^\"]*  $  )");

Dans cette version, le modificateur (?x) est utilisé pour améliorer la lisibilité de l'expression régulière en ignorant les caractères d'espacement.

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