2015-01-07 115 views
0

我需要從一個XML文件中的下列信息的Java正則表達式正則表達式:括號內

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

我需要正則表達式擴展到底部],但我似乎無法得到它的工作。我嘗試了大量的變化,沒有運氣。

+2

恕我直言,使用JSON庫將是一個更直接的方法 – reto

+5

Aaack。請不要使用正則表達式來解析JSON。使用JSON解析器。 – ajb

+3

這是有效的JSON,你可以用Jackson或GSON解析它。 – pbespechnyi

回答

1

這是一個有點火車事故,但:

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

demo

由於「字符」字段是一個數組,因此我允許使用多個術語,這是我在演示中包含的一個示例。

請注意,我剛剛顯示了原始正則表達式;要在java中使用它,你必須避開引號和反斜槓(我沒有胃)。

+0

完美工作。我試圖做到這一點,但沒有做出像這樣的巨大的一個,但最後它們都是一樣的。 – Nox

0

如果您有完整有效的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。

+0

這會工作,但我的系統是圍繞使用正則表達式構建的,並且已經完全構建並準備就緒。我所需要的只是這一部分的工作正則表達式。 – Nox