首页 > 解决方案 > 使用正则表达式替换重复模式追加

问题描述

我有以下模式,我需要在我的 Java 程序中附加/替换。

示例字符串:

1: {\"values" : ["AnyValue1", "TestValue", "Dummy", "SomeValue"], "key" : "value"}

2: {\"otherValue\": \"AnyValue1\", \n" + "\"values\" : [\"AnyValue1\", \"TestValue\", \"Dummy\", \"SomeValue\"], \"key\" : \"value\"}

N此值数组中可以有多个值。

我需要将所有值附加到_val. 但是,只有里面的值values应该附加_val.

Output 1: { "values" : ["AnyValue1_val", "TestValue_val", "Dummy_val", "SomeValue_val"], "key" : "value" }

Output 2: {"otherValue": "AnyValue1", 
          "values" : ["AnyValue1_val", "TestValue_val", "Dummy_val", "SomeValue_val"], "key" : "value"}

我想知道是否可以以某种方式使用正则表达式替换而不是通过循环?

内容在一个字符串中:

String content = "{ \"values\" : [\"AnyValue1\", \"TestValue\", \"Dummy\", \"SomeValue\"], \"key\" : \"value\" }";

标签: javaregexstringreplaceregexp-replace

解决方案


选择:

public static void main(String[] args) {
    String input = "{ \"values\" : [\"AnyValue1\", \"TestValue\", \"Dummy\", \"SomeValue\"], \"key\" : \"value\" }";

    Matcher matcher = Pattern.compile("(.*?\\[)(.*?)(\\].*)").matcher(input);
    if(matcher.find()) {
        String val = matcher.group(2).replaceAll("(\\w+)", "$1_val");
        System.out.println(matcher.group(1) + val + matcher.group(3));
    }
}

输出:

{ "values" : ["AnyValue1_val", "TestValue_val", "Dummy_val", "SomeValue_val"], "key" : "value" }

推荐阅读