我想解析{"aaa","bbb", "ccc"}
之类的字符串到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"
我有一种感觉,这是关于群体和非贪婪的比赛,但我不知道如何写它,有人可以帮助我吗?非常感谢!
P.S。我知道如何使用像String.replace
这样的方法来做,我只是想知道它可以通过正则表达式完成。感谢
感谢您的所有答案和时间,但我首先想要的是在java中使用正则表达式的委托解决方案,尤其是regex
中的组。我想知道如何使用group
来解决它。
答案 0 :(得分: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]);
}
}
答案 1 :(得分: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);
}
使用正则表达式试试这个pattarn:
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));
}
希望这可以解决您的问题。
答案 2 :(得分:1)
RegEx仅匹配:相当复杂
RegEx模式:(?:\{(?=(?:"[^"]+"(?:, ?|(?=\})))*\})|(?!^)\G, ?)"([^"]+)"
注意:它需要全局修饰符 g ,需要转义,使用无限令牌数
在此解释演示:http://regex101.com/r/iE9gS1