在java中使用正则表达式的分割字符串

问题描述:

我是新来的正则表达式,我想要做的是将String拆分为某些条件,但我不知道如何去做。
在java中使用正则表达式的分割字符串

这里是样品/条件

String str = sum1=x+(5+a) 

Array[0] = sum1 
Array[1] = = 
Array[2] = x 
Array[3] = + 
Array[4] = (
Array[5] = 5 
Array[6] = + 
Array[7] = a 
Array[8] =) 

我希望字符串由+-*\()=
拆分这可能吗?

+0

是的,它是非常有可能的,但我不明白为什么你有一个数组? 如果你只是一个字符串(不是数组),你可以做string.split? 你也想分割字符串使用数字/非数字拆分字符串正则表达式 – 2013-05-09 23:58:31

+0

希望你不想做操作的顺序,因为否则你在吠叫错误的树 – sjr 2013-05-09 23:59:58

+0

听起来像是时候制作令牌并解析它们。 – squiguy 2013-05-10 00:00:06

如果你真的需要使用正则表达式,你可能应该使用look-around机制,因为你不想在拆分这个角色,但之前之后他们。

String str = "sum1=x+(5+a)"; 
String[] array=str.replaceAll("\\s+","")//remove all spaces 
        .split("(?<=[+\\-*\\\\()=/])|(?=[+\\-*\\\\()=/])"); 
for (int i=0; i<array.length; i++) 
    System.out.println("Array["+i+"] = "+array[i]); 

输出:

Array[0] = sum1 
Array[1] = = 
Array[2] = x 
Array[3] = + 
Array[4] = (
Array[5] = 5 
Array[6] = + 
Array[7] = a 
Array[8] =) 
+0

你似乎有其他的想法。是他们的方式,而不是使用正则表达式? – newbie 2013-05-10 01:41:17

+0

@newbie如果只是为了这个简单的标记化正则表达式就足够了。但是,也许你应该考虑排序/创建令牌的其他方式,以便稍后像[reverse](http://en.wikipedia.org/wiki/Reverse_Polish_notation)/ [Polish notation](http:/ /en.wikipedia.org/wiki/Polish_notation) – Pshemo 2013-05-10 01:59:25

是的,它是可能的正则表达式应该是这样yourstring.split("[\+\-\*\\\(\)\=]")

+2

这不会破坏你正在分裂的WHICH标记吗? – Patashu 2013-05-10 00:00:30

+0

是的,也许我可以分裂一个非捕获组,就像一个零宽度断言的分裂 – aaronman 2013-05-10 00:01:50