如何查找所有转义引号和常规引号并将其替换为不同的值?



我希望将字符串中所有出现的转义引号 (\"( 替换为 (\\\"(,然后将所有剩余的未转义引号 ("( 替换为转义引号 (\"(。 这是我到目前为止尝试的:

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,找不到转义的引号。

对此的任何帮助不胜感激。

看起来你需要有四个 \ 才能找到一个 . 我用回头和向前看来找到\"。 感谢java,正则表达式,需要在正则表达式中转义反斜杠。

"\\(?>")"会找到\"。

"(?<!\\)""会发现 "'s 前面没有 \。

所以我发现同时做这两件事的解决方案是:

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

只需将单个反斜杠替换为三个反斜杠,然后将引号替换为反斜杠引号:

row = row.replaceAll("\\(?!')", "\\\\\\").replace(""", "\"");

首先将单个 ( \ ( 替换为 ( \\ (,然后将 ( " ( 替换为 ( \" ( (

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

最新更新