日期:2014-05-20  浏览次数:20770 次

求正则表达式分割字符串的思路
一个字符串:str = "(1) P ((2)@!)";
期望分割成一个数组array
arr[0] = (1)
arr[1] = P
arr[2] = (2)
arr[3] = @!

请问应该如何处理?
补充 (1)是一个整体,里面可以是(3)甚至(50)等等

在线等 谢谢
 
正则表达式

------解决方案--------------------
这个就不能用正则了吧  要用栈
扫描字符串
遇到字母压栈  遇到(压栈
遇到)弹栈 看是不是(  如果不是接着弹  直到找到(
然后看栈顶是不是(  不是就弹  直到遇到(

大致思路就是这样
------解决方案--------------------
用匹配的方式试试
	public static void main(String[] args) {
String str = "(1)  P ((2)@!)";
Pattern p = Pattern.compile("(\\(\\d+\\))\\s*(\\w+)\\s*\\((\\(\\d+\\))(.+)\\)");
Matcher m = p.matcher(str);
String[] arr = null;
if(m.find()) {
 arr = new String[]{m.group(1),m.group(2),m.group(3),m.group(4) };
}
for(String s : arr) {
System.out.println(s);
}
}

------解决方案--------------------
Pattern.compile("(\\(\\d+\\))\\s*(\\w+)\\s*\\((\\(\\d+\\))(.+)\\)");

上面的就可以 括号分组,一个个匹配。