当前位置: 首页 > 知识库问答 >
问题:

用正则表达式替换部分字符串

裘嘉树
2023-03-14
{"key1":"value1","key2":"{\"key2_1\":\"123\",\"key2_2\":\"456\",\"key2_3\":\"33333\"}"}
{
    "key1": "value1",
    "key2": "{\"key2_1\":\"123\",\"key2_2\":\"456\",\"key2_3\":\"33333\"}"
}

我想使用Gson将字符串转换为Foo对象:

class Foo {
    private String key1;
    private Bar key2;
    ...
}

class Bar {
    private String key2_1;
    private String key2_2;
    private String key2_3;
    ...
}

下面是我的正则表达式:

String regexp = "\\{[\"a-zA-Z-0-9:,\\\\]*\"key2\":\"\\{\\\\\"key2_1\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\",\\\\\"key2_2\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\",\\\\\"key2_3\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\"\\}\"\\}[\"a-zA-Z-0-9:,\\\\]*";
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(text);
if(matcher.matches()) {
    ... // TODO: Replace all "{, \" and }" but How???
}

如何使用此正则表达式将所有“{\”.和“}替换为{}而不更改JSON中的键和值?

共有1个答案

宰父桐
2023-03-14

黄金法则是不要使用正则表达式来处理这些事情:)我的建议是太依赖JSON映射器了,例如Jackson

你需要做的就是:

>

  • 修复JSON在您的示例中,嵌套{
  • 不需要双引号
  • 添加Jackson依赖项

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    
    ObjectMapper mapper = new ObjectMapper();
    Foo foo = mapper.readValue( "{\"key1\":\"value1\",\"key2\":"
         + " {\"key2_1\":\"123\",\"key2_2\":\"456\",\"key2_3\":\"33333\"}}", Foo.class);
    System.out.println(foo.toString());
    

  •  类似资料:
    • 本文向大家介绍用C#正则表达式替换字符串的一部分,包括了用C#正则表达式替换字符串的一部分的使用技巧和注意事项,需要的朋友参考一下 设置一个字符串- 假设您需要将B和t内的内容替换为A并大写完整的字符串。为此,请使用Replace- 让我们看完整的代码- 示例 输出结果

    • 我的应用程序将userdata.dll的路径存储在字符串中。 我需要转换这个字符串: 转换为: 所有的< code>\都需要复制,这与路径有多少个< code>\无关。 像这样: 对此有任何帮助吗?我正在尝试遵循这个问题: 如何用VB.NET替换这根弦的一部分? 但无法找到如何制作这个Regex。。。

    • 我试图匹配正则表达式模式来替换特定字符串。 示例文本:ABC/1111111 031111111/0318*12345678 我想用“/1222”替换03和18 in/0318,即(2022年12月)。我尝试了string replaceAll方法,但它替换了提供的示例字符串中所有匹配的字符。比如下面; 我尝试过的示例代码: 样本文本。替换(匹配器组(2),“12”); 样本文本。替换(匹配器组(

    • 我有一根绳子: 我想将所有字符(#,)替换为(#),因此例外的输出是: 注意:我不知道字符串中有多少(#)或(#)序列 我尝试的是: 我试着写: 但结果是: 我的在线尝试 我尝试将(*)用于序列,但没有成功: 那么我如何才能得到我的例外输出?

    • 问题内容: 我正在尝试使用正则表达式替换字符串中所有出现的英国汽车登记信息。 当字符串与以下正则表达式完全匹配时,以下swift代码可完美地用于a。 结果是 但是,以下操作无效,并且字符串未修改 结果是 谁能给我任何指示? 问题答案: 您需要删除和锚点。 该装置 开始字符串 和手段 结束字符串 (或行,这取决于选项)。这就是第一个示例起作用的原因:在第一个测试字符串中,字符串的开头实际上是您的模式

    • 问题内容: 如何限制e004_n07中匹配/替换前导零?但是,如果任何一项包含全零,那么我需要在该项中保留一个零(请参见下面的示例)。对于输入字符串,第一个值将始终有3位数字,第二个值将始终有2位数字。 输入和输出示例 是否可以单独使用re.sub完成此操作,还是需要使用re.search/re.match? 问题答案: 如果只想在字母后删除零,则可以使用: 替换为反向引用。请参阅regex演示。