10

我有输入字符串"\\{\\{\\{testing}}}",我想删除所有"\". 必需的 o/p: "{{{testing}}}"

我正在使用以下代码来完成此操作。

protected String removeEscapeChars(String regex, String remainingValue) {
    Matcher matcher = Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(remainingValue);
    while (matcher.find()) {
        String before = remainingValue.substring(0, matcher.start());
        String after = remainingValue.substring(matcher.start() + 1);
        remainingValue = (before + after);
    }
    return remainingValue;
}

我将正则表达式传递为"\\\\{.*?\\\\}".

代码仅适用于“\{”的第一次出现,但并非所有出现。查看不同输入的以下输出。

  1. i/p : "\\{testing}"- o/p:"{testing}"
  2. i/p : "\\{\\{testing}}"- o/p:"{\\{testing}}"
  3. i/p : "\\{\\{\\{testing}}}"- o/p:"{\\{\\{testing}}}"

我希望"\"应该从传递的 i/p 字符串中删除,并且所有"\\{"应该替换为"{".

我觉得问题出在正则表达式值上,即"\\\\{.*?\\\\}".

谁能让我知道获取所需的o / p的正则表达式值应该是什么?

4

4 回答 4

11

您不简单使用的任何原因String#replace

String noSlashes = input.replace("\\", "");

或者,如果您只需要在打开花括号之前删除反斜杠:

String noSlashes = input.replace("\\{", "{");
于 2012-09-14T10:59:08.533 回答
2

它应该像下面这样简单:

String result = remainingValue.replace("\\", "");
于 2012-09-14T10:59:48.640 回答
1

正如之前已经回答的那样,如果您只想删除\之前的斜杠{,最好的方法就是使用

String noSlashes = input.replace("\\{", "{");

但是在你问的问题中,谁能让我知道正则表达式值应该是什么。如果您使用正则表达式是因为您不仅要删除\any 之前的{,而且只删除那些{稍后用 正确关闭的},那么答案是:否。你不能{}用正则表达式匹配嵌套。

于 2012-09-14T11:24:27.123 回答
-1

更改正则表达式:"\\&([^;]{6})"

private String removeEscapeChars(String remainingValue) {
        Matcher matcher = Pattern.compile("\\&([^;]{6})", Pattern.CASE_INSENSITIVE).matcher(remainingValue);
        while (matcher.find()) {
            String before = remainingValue.substring(0, matcher.start());
            String after = remainingValue.substring(matcher.start() + 1);
            remainingValue = (before + after);
        }
        return remainingValue;
    }

它应该工作..

于 2015-01-28T14:12:37.017 回答