Je dois diviser une chaîne à l'aide d'une virgule (,) en tant que séparateur et ignorer toute virgule qui est à l'intérieur de citations (")
La chaîne à scinder est la suivante: sortie: p> Le défi est que le champ de terrain (") ne devrait pas faire partie des jetons divisés. Je suis incapable de comprendre la regex pour cela. P> La sortie attendue de la scission est la suivante: p> FieldSeparator:, Code>
Fieldgroper: " code> p> " 1 "," 2 ", 3," 4,5 " code> p> < p> Je suis capable de le réaliser comme suit: p>
4 Réponses :
résultat: Ce modèle Rexex isolera les sections que vous souhaitez:
Il utilise des groupes non capturants pour isoler les paires de citations évasées,
et un groupe de capture pour tout isoler entre les deux. P>
Vérifiez ici ici:
Démo en direct strong> p>
blockQuote> string [] jetons = record.split ("(, * \", * \ "*)"); code> p> p>
p>
(ne fonctionne pas @ .split code> méthode) em> p>
(?: \\ ") (. *?) (?: \\") code> p>
Cette regex ne correspond pas à 3 code> ou toute autre valeur non jointe à "..." code>.
@ Wiktorstribiżew J'ai mis à jour la solution, mais dans ma solution initiale, j'ai supposé que le modèle "#" code> était cohérent. Je n'ai pas réalisé que 3 code> n'a pas été capturé et je me demande toujours si @RVD a délibérément un format différent pour 3 code>. De toute façon, la nouvelle solution fonctionne.
Désolé mais votre deuxième Sollution ne fonctionnera pas pour une entrée comme 1,2 quand 1 et 2 sont des chiffres distincts.
@Mikhailovvalentine La sortie correspond aux exigences de la RVD. Voir: Poste d'origine Code> / La sortie attendue de la scission est la suivante: code>
Ma proposition:
record = record.replaceAll("\",", "|");
record = record.replaceAll(",\\\"", "|");
record = record.replaceAll("\"", "");
String[] tokens = record.split("\\|");
for (String token : tokens) {
System.out.println(token);
}
Ma suggestion: voir le Démo Regex . Il correspondra au "..." code> comme des chaînes et capturera dans le groupe 1 seulement ce qui entre entre les citations, puis correspondra et capturera dans le groupe 2 séquences de caractères autres que , < / Code> Au début d'une chaîne ou après une virgule. P>
La meilleure suggestion est qu'il nettoie ses données source IMHO.
J'essaierais avec ce type de contournement: sortie: p>
Je devais finalement utiliser une solution de contournement similaire, c'est-à-dire première scission puis enlevez des citations (si elles sont présentes) de chaque jeton.
Je pense que cela fera que ce charcret sera réellement plus lisible et certainement plus rapide. Et l'algorithme est aussi simple que possible. Et il est plus facile de gérer l'exception
"" code> qui apparaîtra probablement tôt ou tard.Pouvons-nous demander pourquoi vous travaillez avec une contribution pseudo-json malformée? La funkyness avec les citations rend cela difficile à gérer et il pourrait être préférable que vous nettoyez la source.