我有这样的语句  String str = "123+567*789-444" ; String[] a = str.split("regex");
希望a出来的效果是数字和符号都分开,a应该是{{1,2,3},{+},{5,6,7},{*},{7,8,9},{-},{444}}请问各位大侠,这个正则该怎么写啊???????

解决方案 »

  1.   

    仅仅是这种没有括号的表达式么?数字中不可能会出现负号么?如果问正则表达式的话,请在提问时达到下面最为基本的要求:1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要详细说明具体要做些什么;
    2,对于查找的问题,详细说明寻找字符串的特征是什么,这些字符串的边界是什么,或者说有些什么规律;
    3,对于替换的问题,详细说明原串是什么,替换后是什么,有些什么规律;
    4,对于验证的问题,详细说明验证的格式是什么;
    5,举两三个覆盖范围尽可能广的示例。需要注意的是,所回复的正则表达式仅仅能满足所提供的示例!问题说得不清不楚的话,我在 CSDN 吃过苦头,提出一个问题,帮他回复好能用了,之后他又增加一点新的要求,然后我又给他回复了,反反复复有很多次,半天时间全耗在那帖子之上了。所以从那以后如果题目我都看不懂、没有例子、也不知道要做什么的正则表达式问题一律不回复,哪怕是 0 分还是 400 分的帖子。
      

  2.   

    谢谢你的提醒,的确提问题是需要严谨些,不仅方便自己,也方便别人解答。
    我的这个问题实质上就是对一个算术表达式中的操作符和操作数进行分离,操作符包括(,),+,-,×,/,操作数就是整数。运算符两边不考虑会出现空格的情况,操作数也不考虑负整数的情况。
    例子:3+18×5/2   可利用split函数分割为 3,+,18,×,5,/,2
         12×(3+12)-9             分割为 12,×,(,3,+,12,),-,9,请问,这样的正则表达式如何写?
      

  3.   

    public class Test{
        public static void main(String args[])  throws Exception{
         String str="12×(-3+12)-9/-2";
         System.out.println(Arrays.toString(str.split("(?=[\\+\\-×/()])|((?<=[\\+\\-×/()])(?<![\\+\\-×/(]{2}))")));
         }
    }试试这个?有问题再调.这个可以容许你再负号。F:\java>java Test
    [12, ×, (, -3, +, 12, ), -, 9, /, -2]
      

  4.   

    在 [ ] 中可以不需要转义(除了“[”、“]”、“\”,以及不在两边的“-”和不在开始的“^”)[\\+\\-×/()]  这个可以改为 [+×/()-] 这样,至于为什么“-”要放在最后,详见:http://topic.csdn.net/u/20080716/22/80cdd418-a0e9-4e7e-8435-df6d4bc11c4a.html 4 楼的回复