java - 使用正则表达式替换重复模式追加
问题描述
我有以下模式,我需要在我的 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\" }";
解决方案
选择:
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" }
推荐阅读
- angular - Kubernetes 内部服务之间的 CORS 问题
- android - 如何模拟自动化 Android Studio UI Espresso 测试套件的网络层响应?
- java - 使用 Jackson 将 JSON 映射到 ArrayList 的问题 - “超出 START_OBJECT 令牌”
- python - 在 ssh 终端中引发 Python Selenium“连接被拒绝”错误,但在常规终端中没有
- r - 使用 RMySQL 未知数据库连接到 MySQL 数据库
- c# - XML反序列化在第一个元素之后不起作用
- ruby-on-rails - AWS:S3 Bucket AWS 您无法授予公共访问权限,因为此账户的阻止公共访问设置已打开
- vue.js - 使用 WebpackDevMiddleware 404s 的客户端深度链接
- python - 如何从当前位置移动按钮
- javascript - 通过在 onClick 期间传递参数来使用 window.open(param,'_blank') 以响应在新选项卡中打开页面是否安全?