Проблема сопоставления регулярных выражений в Android - PullRequest
4 голосов
/ 30 июня 2010

Я пытаюсь найти эту строку:

,"tt" : "ABC","r" : "+725.00","a" : "55.30",

Для:

"r" : "725.00"

А вот мой текущий код:

Pattern p = Pattern.compile("([r]\".:.\"[+|-][0-9]+.[0-9][0-9]\")");
Matcher m = p.matcher(raw_string);

Я пробовал несколько вариантов шаблона, и совпадение не найдено. Второй набор глаз был бы великолепен!

Ответы [ 3 ]

7 голосов
/ 30 июня 2010

Ваше регулярное выражение на самом деле работает, оно почти правильно

Pattern p = Pattern.compile("\"[r]\".:.\"[+|-][0-9]+.[0-9][0-9]\"");
Matcher m = p.matcher(raw_string);
if (m.find()){
    String res = m.toMatchResult().group(0);
}
4 голосов
/ 30 июня 2010

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

if ( m.find() ) {

Ты это делаешь?

Несколько других проблем: вы используете ., чтобы соответствовать пробелам, окружающим двоеточие; если это всегда должен быть пробел, вы должны использовать + (один или несколько пробелов) или \s+ (один или несколько пробельных символов). С другой стороны, точка между цифрами должна совпадать с литералом ., поэтому вам следует избегать его: \. Конечно, поскольку это литерал Java String, вам необходимо избежать обратной косой черты: \\s+ \\..

Вам не нужны квадратные скобки вокруг r, и если вы не хотите совпадать с | перед номером, вы должны изменить [+|-] на [+-].

Хотя некоторые из упомянутых мною проблем могут привести к ложным срабатываниям, ни одна из них не помешает сопоставить действительные входные данные. Вот почему я подозреваю, что вы на самом деле не применяете регулярное выражение, вызывая find(). Это распространенная ошибка.

0 голосов
/ 30 июня 2010

Первым делом попробуйте экранировать символ точки: ... [0-9]+\.[0-9][0-9] ...
, поскольку символ точки соответствует любому символу ...

Второе: [+|-] определяет диапазонсимволов, но это обязательно ...
попробуй [+|-]?

Албан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...