2015-12-19 4 views
-2

В следующем коде у меня есть небольшой набор данных; даты и цены. Тем не менее, я хочу просто показать цены:Java regex за исключением некоторых символов

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class RegexTest { 
    public static void main(String[] args){ 

     String[] data = new String[4]; 
     data[0]="Dec 10, 2015"; 
     data[1]="116.04"; 
     data[2]="Dec 9, 2015"; 
     data[3]="46,361,357"; 


     for (int i=0; i<data.length; i++){ 
      String qq = "\\d+.[^\\s]\\d*.\\d+"; 
      Pattern p2 = Pattern.compile(qq); 
      Matcher m2 = p2.matcher(data[i]); 

      while(m2.find()){ 
       System.out.println(m2.group()); 
      } 
     } 
    } 
} 

Результат:

10, 2015 
116.04 
46,361,357 

Как вы можете видеть, это не показывает Dec 9 чего я хочу, но выводящее Dec 10. Может ли кто-нибудь помочь мне решить эту проблему? Обратите внимание, что мне не разрешено использовать какую-либо библиотеку в этой работе. Это только работа с регулярным выражением.

+0

Примечание: Для того, чтобы соответствовать '.' буквально, что вам нужно, чтобы избежать его в противном случае это будет соответствовать любому символу, который не является новой строки – Tushar

+1

«Тем не менее, я хочу только объяснить цены:»Что это означает ? «regex исключает пробелы, которые есть после, в датах« о, я думал, что мы говорим о ценах? «Это отлично работает с 9 декабря», что отлично работает? – Aaron

+0

@Aaron Я хочу показывать только цены. Регулярное выражение отображает цены, но также отображает '10,2015', которые не должны отображаться. Мой вопрос, как я могу изменить регулярное выражение так, чтобы оно не было датами? – Nasser

ответ

0

Следующая регулярное выражение будет соответствовать строкам, которые начинаются и заканчиваются цифрой и может содержать любое количество . и ,:

^\d[\d.,]+\d$ 

См a demo.

Regular expression visualization

1

Хорошее определение для цен будет следующим:

^\\d+([.,]\\d+)*$ 

Основной Improvment по сравнению с вами, что я убедиться, что я сопрягать всю строку по регулярному выражению заключени в ^...$.

Также я не уверен, что использование регулярных выражений - вот такая хорошая идея. У try/catch на Integer.parseInt был бы тот же результат.

Смежные вопросы