1

我想解析一个字符串,比如{"aaa","bbb", "ccc"}to aaa,bbb,ccc。我怎样才能在java的正则表达式中做到这一点?我尝试编写如下代码:

String s = "{\"aaa\",\"bbb\", \"ccc\"}";
Pattern pattern = Pattern.compile("\\{\\\"([\\w]*)\\\"([\\s]*,[\\s]*\\\"([\\w]*)\\\")*}");
Matcher matcher = pattern.matcher(s);
if(matcher.find())      {
    StringBuilder sb = new StringBuilder();
    int cnt = matcher.groupCount();
    for(int i = 0; i < cnt; ++i)        {
        System.out.println(matcher.group(i));
    }
}

但输出是

{"aaa","bbb", "ccc"}
aaa
, "ccc"

我有一种感觉,这是关于小组和不贪婪匹配的东西,但我不知道该怎么写,有人可以帮我吗?非常感谢!

PS我知道如何使用类似的方法来做到这一点String.replace,我只是想知道它可以通过正则表达式来完成。谢谢

感谢您的所有回答和时间,但我首先想要的是在 java 中使用正则表达式的委托解决方案,尤其是在regex. 我想知道如何使用group来解决它。

4

3 回答 3

1

试试这个。

import java.util.*;
public class Main{

    public static void main(String[] args){
        String s = "{\"aaa\",\"bbb\", \"ccc\"}";
        s = s.substring(1,s.length() -1 );
        s = s.replace("\"","");
        String[] sa = s.split(", ?");
        for (int i = 0; i < sa.length; i++)
            System.out.println(sa[i]);
    }   
}
于 2013-03-17T10:24:55.743 回答
1

试试这个示例代码:

public class RegexTester {
public static void main(String[] args) throws Exception {
    String data = "{\"aaa\",\"bbb\", \"ccc\"}";

    String modifiedData = data.replaceAll("\\{|\"|\\}", "");

    System.out.println("Modified data : " + modifiedData);
}

使用正则表达式试试这个模式:

Pattern pattern = Pattern.compile("\\{\"(.+?)\"(,?)\"(.+?)\"(,?)\\s*\"(.+?)\"");
    Matcher matcher = pattern.matcher(data);
    System.out.println("Started");
    while (matcher.find()) {

        System.out.print(matcher.group(1));
        System.out.print(matcher.group(2));
        System.out.print(matcher.group(3));
        System.out.print(matcher.group(4));
        System.out.print(matcher.group(5));
    }

希望这能解决您的问题。

于 2013-03-17T10:26:31.317 回答
1

仅正则表达式匹配:相当复杂

正则表达式模式:(?:\{(?=(?:"[^"]+"(?:, ?|(?=\})))*\})|(?!^)\G, ?)"([^"]+)"
注意:它需要全局修饰符g需要转义,使用无限数量的标记

在这里解释演示:http ://regex101.com/r/iE9gS1

于 2013-03-17T10:50:54.517 回答