2015-05-06 2 views
1

У меня есть эта длинная строка:фильтра и найти целые числа в виде строки с Regex

String responseData = "fker.phone.bash,0,0,0" 
    + "fker.phone.bash,0,0,0" 
    + "fker.phone.bash,2,0,0"; 

То, что я хочу сделать, это извлечь целые числа в этой строке. Я успешно сделал это с этим кодом:

String pattern = "(\\d+)"; 
// this pattern finds EVERY integer. I only want the integers after  the comma 

     Pattern pr = Pattern.compile(pattern); 

     Matcher match = pr.matcher(responseData); 


     while (match.find()) { 

      System.out.println(match.group()); 

     } 

До сих пор он работает, но я хочу, чтобы мое регулярное выражение более безопасным, так как responsedata я динамично. Иногда я мог бы получить целое число в середине строки, но мне нужны только последние целые числа, то есть после запятой.

Я знаю, что регулярное выражение для начала - это ^, и я должен поставить свою запятую в качестве аргумента, но я не знаю, как собрать все это вместе, и именно поэтому я прошу о помощи. Спасибо.

+0

"* значение после запятой *" есть много способов сделать это. Вы пробовали просто поставить запятую перед номером и получить только числовую часть? Я имею в виду что-то вроде ', (\ d +)' и используя 'group (1)'. – Pshemo

+0

@Pshemo Да, я попробовал. Проблема заключалась в том, что я не знал, как фильтровать запятые. Мне нужны только чистые числа. :) –

+0

Знаете ли вы о [группах] (http://www.regular-expressions.info/brackets.html) в regex? – Pshemo

ответ

2
String pattern = "(,)(\\d)+"; 

Затем получите вторую группу.

+0

или использовать lookbehind '(? <=,) \\ d +' и получить целое совпадение –

1

Вы можете просто использовать следующую команду и найти по match.group(1):

String pattern = ",(\\d+)"; 

См working demo

Вы также можете использовать границы слов, чтобы получить независимые номера:

String pattern = "\\b(\\d+)\\b"; 
+0

Не будет ли это соответствовать запятой И следующее целое число? Я считаю, что ОП просит только целые числа. – NBartley

+0

Спасибо, знаете, как я могу фильтровать запятую? Мне нужны только чистые числа. Еще раз спасибо. –

+0

@SandeepSingh проверить обновление –

2

Вы можете использовать positive lookbehind для этого:

String pattern = "(?<=,)\\d+"; 

Вам не нужно извлекать группы, чтобы использовать это решение, потому что lookbehind - zero-length assertion.

+0

Я думаю, что это самый чистый подход, поэтому вам не нужно обрабатывать совпадения. – NBartley