Какой синтаксис для регулярного выражения Java должен использоваться, чтобы поймать почти последнюю часть строки (подробности в посте)? - PullRequest
2 голосов
/ 12 декабря 2011

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

Случайные вещи 123.4: {ИЛИ} Случайные вещи 1234.5

Я хочу сделать в этой строке следующее:

while ((c_line = c_reader.readLine()) != null) {
System.out.println("Entering RegExp loop\n");
String regline1 = "\.\\d{3}\.\\d\\:";
   if (c_line.endsWith (regline1)) {
       /* read value and next few lines into buffer */
   }
}

Если я не ошибаюсь, мое регулярное выражение должно совпадать с [Любой символ] (чтобы убедиться, что я перехватываю 3- и 4-значные значения (перед запятой) -> [3 цифры], литерал [.] и снова [цифра]. К сожалению, я не могу получить это соответствие, чтобы сделать то, что я ожидаю, однако.

Если кто-нибудь скажет мне, где я совершаю (концептуальную) ошибку, это будет с благодарностью.

С уважением, Бас Янсен

Ответы [ 3 ]

3 голосов
/ 12 декабря 2011

Метод заканчивается с класса String ищет строку , а не шаблон в конце другой строки.

1 голос
/ 12 декабря 2011

Попробуйте это:

Pattern pattern = Pattern.compile(".*\\d{3,4}\\.\\d:$");
Matcher matcher = pattern.matcher(c_line);
if (matcher.matches()){
   ...
}

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

0 голосов
/ 13 декабря 2011

Для дальнейшего использования вы можете использовать любого из перечисленных здесь помощников RegEx , чтобы помочь вам решить проблемы с выражениями.

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