通过Java中的正则表达式从字符串中提取数字

问题描述:

我创建了一个程序,它从putty中获取字符串并从获取该字符串的processID中杀死processID。目前它工作正常,但有时它不可靠。通过Java中的正则表达式从字符串中提取数字

请找到我在下面使用的目标和正则表达式。

目标字符串root 14139 1 25 Aug03 ? 06:47:50 /usr/local

正则表达式我用\\\d{3,5}

我想能找到根源后立即数而忽略了其他文本的正则表达式。 (例如,我想从示例字符串中提取14139,删除所有额外空间。)

我该怎么做?

+0

您使用了正则表达式,结果是什么?另外,如果你想匹配“root”,你总是可以将它添加到正则表达式模式,你试过了吗? –

+0

's = s.replaceFirst(“^。* \\ broot \\ s +(\\ d {3,5})。* $”,“$ 1”);' –

+0

尝试这个正则表达式(?:root)[0 -9] + –

所以你需要一个由空格分隔的第二个字段的数字。下面的正则表达式得到它的捕获组1:

^\S+\s+(\d+) 

演示:https://regex101.com/r/bE7xL8/1

和样本Java代码:

String input = "root 14139 1 25 Aug03 ? 06:47:50 /usr/local"; 
Pattern pattern = Pattern.compile("^\\S+\\s+(\\d+)"); 
Matcher matcher = pattern.matcher(input); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

演示:https://ideone.com/LVLCNm

+0

你的代码在演示中有效,但是如何在java代码中使用它们,它给了我错误信息。 – mashkurm

+0

https://ideone.com/LVLCNm –

+0

什么错误信息? –

我建议这一个:

^root (\d*)\D?.* 

捕获1或起始“root”的字符串后更多位数和通过不位数字符分隔

测试仪: https://regex101.com/r/sL8oJ7/1

这会有点更宽容和较少依赖于空格数,再次使用捕获组:

root[^\d]*(\d+)

您可以使用下面的正则表达式,并使用第一组:root[^\S]*(\d+)

Demo and Example

试试这个为你的目标字符串提供输出按你的要求输出。

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

class exampleproblem { 
public static void main(String[] args) { 
    String target = "root 14139 1 25 Aug03 ?  06:47:50 /usr/local"; 
    String regexex = "root(.[0-9]+)"; 
    Pattern pattern = Pattern.compile(regexex); 
    Matcher matcher = pattern.matcher(target); 
    while (matcher.find()) { 
     System.out.println(matcher.group(1).trim()); 
    } 
} 
}