0
votes

Comment rechercher et remplacer tous les guillemets échappés et les guillemets normaux par des valeurs différentes?

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.


1 commentaires

@ 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.


3 Réponses :


0
votes

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("\"", "\\\"");


1 commentaires

Cela ne fonctionnera pas avec ceux qui sont seuls, non? C'est à dire. "test \ \" "retournera" test \\ \\\ "" rgiht?



0
votes

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("\\\\\""));
        }


0 commentaires

0
votes

remplacez d'abord simple (\) par (\\), puis remplacez (") par (\")

row = row.replace("\\", "\\\\").replace("\"", "\\\"");


0 commentaires