Je cherche à remplacer toutes les occurrences d'un guillemet échappé (\ ") par (\\\") dans la chaîne, puis à remplacer tous les guillemets non échappés restants (") par des guillemets échappés (\"). Voici ce que j'ai essayé jusqu'à présent:
row = row.replaceAll("\\\\(?>\")", "\\\\\"");
row = row.replaceAll("((?<!\\\\)\")", "\"");
Exemple d'entrée:
"Ceci est un test avec \" et "où \" est remplacé par un triple \ avant "
Exemple de sortie: \" Ceci est un test par \\\ "et \" où \\\ "est remplacé par le triple \ avant \"
\\ (?> \ ")" code> fonctionne sur https://www.freeformatter.com/java- regex-tester.html # ad-output dans replaceAll ne trouve pas les guillemets échappés.
Toute aide à ce sujet est appréciée.
3 Réponses :
Remplacez simplement la barre oblique inverse simple par une barre oblique inverse triple, puis remplacez les guillemets par une barre oblique inverse:
row = row.replaceAll("\\\\(?!')", "\\\\\\\\\\\\").replace("\"", "\\\"");
Cela ne fonctionnera pas avec ceux qui sont seuls, non? C'est à dire. "test \ \" "retournera" test \\ \\\ "" rgiht?
Il semble que vous deviez en avoir quatre pour trouver un fichier. J'ai utilisé un regard en arrière et en avant pour trouver \ ". Crédit à \") " trouvera \".
"(? trouvera "est sans \ avant.
Donc, la solution que j'ai trouvée pour faire les deux est:
Pattern escapePattern = Pattern.compile("\\\\(?>\")");
Pattern quotePattern = Pattern.compile("(?<!\\\\)\"");
for(String row : rows.split("\n")) {
Matcher escapeMatcher = escapePattern.matcher(row.trim());
String escapedString = escapeMatcher.replaceAll("\\\\\\\\\\\\\"");
Matcher quoteMatcher = quotePattern.matcher(escapedString);
queryRows.add(quoteMatcher.replaceAll("\\\\\""));
}
remplacez d'abord simple (\) par (\\), puis remplacez (") par (\")
row = row.replace("\\", "\\\\").replace("\"", "\\\"");
@ Mandy8055 Non, cela attrape tous non seulement ceux qui préfixent les guillemets. Donc "Ceci est un test avec \ et \" ... "les deux sont remplacés.