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
Libérer: 2024-12-02 02:21:10
original
529 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Copier après la connexion

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)  ,  (?=  (?:  [^\"]*  \"  [^\"]*  \"  )*  [^\"]*  $  )");
Copier après la connexion

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!

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