通过Java中的正则表达式从字符串中提取数字
问题描述:
我创建了一个程序,它从putty中获取字符串并从获取该字符串的processID中杀死processID。目前它工作正常,但有时它不可靠。通过Java中的正则表达式从字符串中提取数字
请找到我在下面使用的目标和正则表达式。
目标字符串:root 14139 1 25 Aug03 ? 06:47:50 /usr/local
正则表达式我用:\\\d{3,5}
我想能找到根源后立即数而忽略了其他文本的正则表达式。 (例如,我想从示例字符串中提取14139,删除所有额外空间。)
我该怎么做?
答
所以你需要一个由空格分隔的第二个字段的数字。下面的正则表达式得到它的捕获组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));
}
答
这会有点更宽容和较少依赖于空格数,再次使用捕获组:
root[^\d]*(\d+)
答
试试这个为你的目标字符串提供输出按你的要求输出。
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());
}
}
}
您使用了正则表达式,结果是什么?另外,如果你想匹配“root”,你总是可以将它添加到正则表达式模式,你试过了吗? –
's = s.replaceFirst(“^。* \\ broot \\ s +(\\ d {3,5})。* $”,“$ 1”);' –
尝试这个正则表达式(?:root)[0 -9] + –