【问题标题】:regex with replaceAll带有replaceAll的正则表达式
【发布时间】:2017-11-14 06:05:25
【问题描述】:

我已经进行了一些搜索,并希望得到有关此问题的建议:

我想用"labels":["Webapp"]替换"labels":"Webapp"

我找到了正则表达式 (\"labels\"\:\")+(([a-zA-Z]|\s|\-)+)+(\") 与以下替换 "labels":["$2"]

我使用方法 replaceAll 和 Talend 编辑器。

我写了output_row.json = output_row.json.replaceAll("(\"labels\"\:\")+(([a-zA-Z]|\s|\-)+)+(\")",""labels":["$2"]");,但它不起作用。

消息细节:无效的转义序列(有效的是 \b \t \n \f \r \" \' \ )

然后我转义了字符,我做到了:

output_row.json = output_row.json.replaceAll("(\\"labels\\"\:\\")+(([a-zA-Z]|\\s|\-)+)+(\\")","\"labels\":[\"$2\"]");

但是还不行。

你能帮帮我吗?

谢谢。

【问题讨论】:

    标签: java


    【解决方案1】:

    问题:不要转义-: 它们不是regex 中的特殊字符

    转义 \s\\s 加上转义 " 就像您在第二个示例中所做的 \"labels\":[\"$2\"]

    虽然您可以使用更简洁的正则表达式并将您的 \\s-character class [] 结合起来

    你可以使用(\"labels\":\")+([a-zA-Z -]+)\

    System.out.println("labels\":\"Webapp"
            .replaceAll("(\"labels\":\")+([a-zA-Z -]+)\""
                    , "\"labels\":[\"$2\"]"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      相关资源
      最近更新 更多