Java 括号内的正则表达式

Java regex inside brackets

我需要从 xml 文件中获取以下信息:

    "abridged_cast": [
      {
        "name": "Tom Hanks",
        "characters": ["Woody"]
      },
      {
        "name": "Tim Allen",
        "characters": ["Buzz Lightyear"]
      },
      {
        "name": "Joan Cusack",
        "characters": ["Jessie the Cowgirl"]
      },
      {
        "name": "Don Rickles",
        "characters": ["Mr. Potato Head"]
      },
      {
        "name": "Wallace Shawn",
        "characters": ["Rex"]
      }
    ],

到目前为止,我已经能够将其剪切为:

    "abridged_cast": [
     {
        "name": "Tom Hanks",
        "characters": ["Woody"]

以上是使用此正则表达式获得的:

\"abridged_cast\": \[([^]]+)\]

我需要将正则表达式扩展到底部 ],但我似乎无法让它工作。我尝试了很多变体,但都没有成功。

如果你有完整有效的JSON,你可以用Jackson或者GSON解析。

这是数据类:

public static class Role {
    private String name;
    private List<String> characters;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<String> getCharacters() {
        return characters;
    }

    public void setCharacters(List<String> characters) {
        this.characters = characters;
    }
}

public static class Cast {
    @JsonProperty("abridged_cast")
    private List<Role> roles;

    public List<Role> getRoles() {
        return roles;
    }

    public void setRoles(List<Role> roles) {
        this.roles = roles;
    }
}

这就是您解析它的方式:

ObjectMapper om = new ObjectMapper();
Cast cast = om.readValue(s, Cast.class);

其中 s 是您的 JSON。

这有点像火车失事,但是:

"abridged_cast": \[(\s*\{\s*"name": "[a-zA-Z .]+",\s*"characters": \[("[a-zA-Z .]+", )*"[a-zA-Z .]+"\]\s*\}(,(?=\s*\{)|\s))*\s*\],?

参见demo

由于 "characters" 字段是一个数组,我在那里允许使用多个术语,我在演示中包含了一个示例。

请注意,我刚刚展示了原始正则表达式;要在 java 中使用它,您必须转义引号和反斜杠(我没有胃口)。