2010-08-01 3 views
1

у меня есть такие выражения, как:Какое regex использовать?

-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

+0

Действительно хорошо! Я бы отбросил раскол и попал в какой-то длинный помощник регулярных выражений. Твое намного лучше. – Nick

+0

может кто-нибудь объяснить, что было не так с регулярным выражением, которое я пытался? – pranay

1

Crossposted to forums.sun.com.

Это не работа для REs самостоятельно. Вам нужен сканер для возврата операторов и чисел и анализатор выражений. Рассмотрим -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)); 
} 
Смежные вопросы