Извлечение подстроки из этих строк с помощью регулярных выражений (Java) - PullRequest
1 голос
/ 12 декабря 2011

Я пытаюсь извлечь номер TPS из следующих строк, используя Java - строки будут считаны из файла, и поэтому строки могут появляться в любом порядке (заранее не известно), например, я не знаю, какая из строкЯ имею дело с - это может быть один из этих двух:

Testing performance TPS..  ok. (795 TPS recorded for run)

Testing performance TPS..  warning: TPS seems low - it was 10 TPS and I expected to achieve over 50

Например, для первой строки я хотел бы число 795, а для второй строки я хотел бы число 10.

Кто-нибудь знает, как сделать это с помощью регулярных выражений или аналогичных с использованием Java?

Большое спасибо

Ответы [ 3 ]

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

Вам необходимо найти первую группу числовых символов на входе.Номер завершается пробелом.

Вы можете использовать это регулярное выражение:

    String regex = "[^\\d]+(\\d+) .*";

Номер записан в первой группе ($1).

Здесьпростой тест:

public static void main(String[] args) throws Exception {

    String[] lines = {
        "Testing performance TPS..  ok. (795 TPS recorded for run)",
        "Testing performance TPS..  warning: TPS seems low - it was 10 TPS and I expected to achieve over 50"
    };

    String regex = "[^\\d]+(\\d+) .*";
    Pattern p = Pattern.compile(regex);
    for (String s: lines) {
        Matcher m = p.matcher(s);
        if (m.matches()) {
            System.err.println(m.group(1));
        }
    }
}

Вывод:

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

Если вы всегда ищете целое число, за которым следует строка «TPS», вы можете сделать

"(\\d+) TPS"

Но вам лучше быть уверенным, что это всегда будет в этом формате - это было бы лучшеизменить формат вывода, если это возможно.

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

Это регулярное выражение должно сделать трюк:

    ^[^0-9]*([0-9]+).*$

Соответствует любой строке, содержащей число, и извлекает первое число в строке.

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


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

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