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 :
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!