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 中使用它,您必须转义引号和反斜杠(我没有胃口)。
我需要从 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 中使用它,您必须转义引号和反斜杠(我没有胃口)。