使用regex(Java)从这些字符串中提取子字符串

时间:2011-12-12 14:42:10

标签: java regex

我正在尝试使用Java从以下字符串中提取TPS编号 - 字符串将从文件中读取,因此字符串可以按任何顺序出现(事先不知道),例如我不知道我正在处理哪些字符串 - 它可能是这两个中的任何一个:

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

E.g。对于第一个字符串,我希望数字为795,对于第二个字符串,我希望数字为10。

有没有人知道如何使用Java进行正则表达式或类似的操作?

非常感谢

3 个答案:

答案 0 :(得分:4)

您需要在输入中找到第一组数字字符。该号码以空格终止。

您可以使用此正则表达式:

    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

答案 1 :(得分:3)

如果您一直在寻找一个整数后跟字符串“TPS”,那么您可以

"(\\d+) TPS"

但你最好确定它总是采用这种格式 - 如果可能的话,最好修改输出格式。

答案 2 :(得分:1)

这个正则表达式可以解决这个问题:

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

它匹配包含数字的任何行,并提取行中的第一个数字。

然而,实际上不可能只从这两个例子中概括出来。例如,您没有向我们展示正则表达式不应匹配的示例。


我同意评论说这是一种提取信息的有趣方式。除非您非常确定您的输入文本,否则您可能会遇到正则表达式无法处理的不同形式;例如当它不应该匹配或反之亦然