Как найти и заменить все экранированные кавычки и обычные кавычки другими значениями? - PullRequest
0 голосов
/ 19 июня 2020

Я хочу заменить все вхождения экранированной кавычки (\ ") на (\\\") в строке, а затем заменить все оставшиеся неэкранированные кавычки (") экранированными кавычками (\"). Вот что я пробовал до сих пор:

row = row.replaceAll("\\\\(?>\")", "\\\\\"");
row = row.replaceAll("((?<!\\\\)\")", "\"");

Пример ввода: "This is a test with \" and "'s where \" is replaced with triple \'s before "

Пример вывода: \"This is a test with \\\" and \"'s where \\\" is replaced with triple \'s before \"

\\(?>\")" работает на https://www.freeformatter.com/java-regex-tester.html#ad -output в replaceAll не находит экранированных кавычек.

Любая помощь по этому поводу приветствуется.

Ответы [ 3 ]

0 голосов
/ 19 июня 2020

Похоже, вам нужно четыре штуки, чтобы найти. Я использовал ретроспективный анализ и вперед, чтобы найти \ ". Кредит на java, регулярное выражение, необходимо экранировать backsla sh в регулярном выражении .

"\\\\(?>\")" найдет \".

"(?<!\\\\)\"" найдет «без символа \ перед ним.

Итак, решение, которое я нашел для обоих вариантов:

        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 голосов
/ 19 июня 2020

сначала замените одиночный (\) на (\\), а затем замените (") на (\")

row = row.replace("\\", "\\\\").replace("\"", "\\\"");
0 голосов
/ 19 июня 2020

Просто замените одинарную backsla sh тройной backsla sh, затем замените кавычки на backsla sh -quote:

row = row.replaceAll("\\\\(?!')", "\\\\\\\\\\\\").replace("\"", "\\\"");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...