我有以下格式的数据:
CODE FIRSTTYPE: [DATA OF FIRST TYPE] SECONDTYPE: [DATA OF SECOND TYPE]
我想把它拆分成这样:
CODE
FIRSTYPE:
DATA OF FIST TYPE
SECONDTYPE:
DATA OF SECOND TYPE
任何人都可以帮我这么做吗?
提前致谢!
编辑:
我试过这个:
(\[\s*(((?!\[|\]).)+)\s*\])
但它似乎只做了一次,也删掉了其他的话。
答案 0 :(得分:0)
这是一个可能的解决方案,它基于将方括号或非空白序列之间的文本匹配到捕获组中:
String str = "CODE FIRSTTYPE: [DATA OF FIRST TYPE] SECONDTYPE: [DATA OF SECOND TYPE]";
Pattern r = Pattern.compile("\\[([^\\]]*)\\]|(\\S+)");
Matcher matcher = r.matcher(str);
List<String> arr = new ArrayList<String>();
while (matcher.find()) {
if (matcher.group(1) == null)
arr.add(matcher.group(2));
else
arr.add(matcher.group(1));
}
// PRINT FOR DEMO
String[] simpleArray = new String[arr.size()];
arr.toArray(simpleArray);
for (String s : simpleArray) { System.out.println(s); }
正则表达式是
\[([^\]]*)\]|(\S+)
请参阅regex demo
答案 1 :(得分:0)
如果格式保持不变,则此方法有效:
String name="CODE FIRSTTYPE: [DATA OF FIRST TYPE] SECONDTYPE: [DATA OF SECOND TYPE]";
Pattern pat=Pattern.compile("(\\w+)\\s(\\w+:)\\s\\[([\\w+\\s]*)\\]\\s(\\w+:)\\s\\[([\\w+\\s]*)\\]");
Matcher mat=pat.matcher(name);
while(mat.find()){
System.out.println(mat.group(1));
System.out.println(mat.group(2));
System.out.println(mat.group(3));
System.out.println(mat.group(4));
System.out.println(mat.group(5));
}