我正在尝试使用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进行正则表达式或类似的操作?
非常感谢
答案 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]+).*$
它匹配包含数字的任何行,并提取行中的第一个数字。
然而,实际上不可能只从这两个例子中概括出来。例如,您没有向我们展示正则表达式不应匹配的示例。
我同意评论说这是一种提取信息的有趣方式。除非您非常确定您的输入文本,否则您可能会遇到正则表达式无法处理的不同形式;例如当它不应该匹配或反之亦然。