试图用正则表达式将字符串分成3部分

时间:2019-04-17 15:41:42

标签: java regex

如果有分隔符,我需要将JSONPath路径分为3部分。分隔符将指示数组。

例如:

  

$。Colors [*]。name

需要成为:

Bitmap bitmap = ((BitmapDrawable) ((ImageView) nextChild).getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 60, baos);
byte[] imginbyte = baos.toByteArray();
value = Base64.encodeToString(imginbyte, Base64.DEFAULT);

如果有多个:

喜欢:

Before: "$.Colors"
Separator: "[*]"
After: ".name"

首先需要采取以下步骤:

$.Colors[*].Color[*].name

我也希望它可以在过滤器上工作

Before: "$.Colors"
Separator: "[*]"
After: ".Color[*].name"

它将在该过滤器值上分割。

$.Colors[?(@.type == 'Primary')].Color[*].name

到目前为止,我的尝试没有结果:

Before: "$.Colors"
Separator: "[?(@.type == 'Primary')]"
After: ".Color[*].name"

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:2)

您需要的正则表达式是用来获得帖子中提到的预期匹配项的

(.*?)(\[[^[\]]*\])(.*)

在这里

  • (.*?)-该部分在分隔符模式之前尽可能少地捕获Before部分,并捕获group1中的数据
  • (\[[^[\]]*\])-该部分捕获以文字[开头的分隔符,后跟[]以外的任何零个或多个字符,后跟{{1 }}
  • ]-最后,这捕获了(.*)部分的其余部分

Regex Demo

Java代码

After

按预期方式打印以下内容,

List<String> list = Arrays.asList("$.Colors[*].name","$.Colors[*].Color[*].name","$.Colors[?(@.type == 'Primary')].Color[*].name");
Pattern p = Pattern.compile("(.*?)(\\[[^\\[\\]]*\\])(.*)");

list.forEach(x -> {
    Matcher m = p.matcher(x);
    if (m.matches()) {
        System.out.println("For string: " + x);
        System.out.println("Before: "+ m.group(1));
        System.out.println("Separator: "+ m.group(2));
        System.out.println("After: "+ m.group(3));
        System.out.println();
    }
});