2010-08-01 39 views
1

我有這樣的表達:要使用哪種正則表達式?

-3-5 
or -3--5 
or 3-5 
or 3-+5 
or -3-+5 

我需要extact數字,分裂的「 - 」在上述情況下,它們之間即徵我需要, -3和5,-3,-5 ,3和5,3和+5,-3和+5。 我一直在使用這種嘗試:

String s[] = str.split("[+-]?\\d+\\-[+-]?\\d+"); 
    int len = s.length; 
     for(int i=0;i<len;i++)System.out.println(s[i]); 

,但它不工作

回答

8

嘗試用正則表達式來分割:

str.split("\\b-") 

的字邊界\b應該只前或數字後匹配等等與-組合使用時只有以下-作爲範圍指示符匹配:

-3-5, -3--5 , 3-5,3-+5,-3-+5 
^ ^ ^^ ^
+0

@Gumbo:非常好! – kbrimington 2010-08-01 08:45:31

+0

真的很好!我會放棄分裂,並結束了一些長的正則表達式匹配。你的好多了。 – Nick 2010-08-01 08:50:14

+0

有人可以請解釋我試過的正則表達式有什麼問題嗎? – pranay 2010-08-01 09:00:13

1

交叉訪問forums.sun.com。

這不是RE自己的工作。你需要一個掃描器來返回操作符和數字,以及一個表達式解析器。考慮-3 ------- 5。

0

你的表情很好。分裂是沒有選擇,但因爲你要匹配的表達你的字符串 - 不使用它分割字符串:

下面是一些代碼,可以利用你的表情來獲得你想要的東西:

String a = "-90--80"; 
Pattern x = Pattern.compile("([+-]?\\d+)\\-([+-]?\\d+)"); 
Matcher m = x.matcher(a); 
if(m.find()){ 
System.out.println(m.group(1)); 
System.out.println(m.group(2)); 
}