Diviser le texte délimité avec des guillemets intégrés
Lors de l'analyse de texte qui suit un format délimité par des virgules, la gestion des guillemets intégrés peut poser un défi. Cet article aborde ce problème en proposant une solution pour diviser une chaîne en virgules tout en préservant l'intégrité du texte placé entre guillemets.
Considérez le texte suivant :
123,test,444,"don't split, this",more test,1
Utilisation de la chaîne de base. La méthode split(",") donnerait le résultat suivant :
123 test 444 "don't split this" more test 1
Cependant, l'objectif est de conserver le texte cité comme un seul entité :
123 test 444 "don't split, this" more test 1
Pour y parvenir, nous utilisons une solution basée sur une expression régulière :
str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Cette expression divise la chaîne en fonction de virgules suivies d'un nombre pair de doubles citations. Cela garantit que les virgules dans le texte cité sont ignorées en tant que délimiteurs.
Comprendre l'expression régulière :
Syntaxe alternative :
Pour plus de lisibilité, vous pouvez également diviser l'expression régulière en plusieurs lignes à l'aide du modificateur (?x) :
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 approche garantit une division précise du texte délimité, en tenant compte à la fois des virgules et des guillemets intégrés.
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!