适用于我的多模式替换的更简单的正则表达式

时间:2019-02-04 17:28:03

标签: java regex

我有以下代码来解决需要删除简单的json标记的情况:

String inputExample = "[\"883-DDEQW\"]";
inputExample = inputExample.replaceAll("]", "");
inputExample = inputExample.replaceAll("\\[", "");
inputExample = inputExample.replaceAll("\"", "");
inputExample = inputExample.replaceAll("\\\\", "");

,从而使生成的字符串变为所需的字符串:883-DDEQW

因此需要4行代码来执行替换。有没有执行相同操作的更简单(或者我应该说更简洁)的方法?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以匹配所需的输出,而不是除去不需要的字符。您的情况似乎是字母,数字和-的序列。 因此模式可能如下所示:[\w\d-]+

@Test
public void testRegexp(){
    final Pattern pattern = Pattern.compile("([\\w\\d-]+)");
    final String inputExample = "[\"883-DDEQW\"]";
    final Matcher matcher = pattern.matcher(inputExample);
    if (matcher.find()) {
        System.out.println(matcher.group());
    }
}

结果:883-DDEQW

用于测试正则表达式的有用工具:https://www.freeformatter.com/java-regex-tester.html#ad-output

更新:

如果您知道将获得适当的JSON数组,则可以使用某些库对其进行解析。常用的是Google Gson:

@Test
public void testJson(){
    final String inputExample = "[\"883-DDEQW\"]";
    JsonArray jsonArray = new JsonParser().parse(inputExample).getAsJsonArray();
    for (final JsonElement element: jsonArray){
        System.out.println(element.getAsString());
    }
}

答案 1 :(得分:0)

您可以将要替换的所有字符放入字符类:

[\]\["\\]

作为Java字符串:

"[\\]\\[\"\\\\]"

您可以将其传递给replaceAll

inputExample = inputExample.replaceAll("[\\]\\[\"\\\\]", "");