在Java中通过Regex从String中提取数字

时间:2016-08-04 12:47:42

标签: java regex

我创建了一个程序,它从putty中获取字符串,并从该字符串中获取processID来杀死processID。目前它工作正常但有时它不可靠。

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

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

RegEx我用过\\\d{3,5}

我想获得可以在root之后找到立即数的RegEx并忽略其他文本。 (例如,我想从示例字符串中提取14139,删除所有额外空格。)

我该怎么做?

5 个答案:

答案 0 :(得分:3)

所以你需要一个由空格分隔的第二个字段中的数字。以下正则表达式在捕获组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

答案 1 :(得分:0)

我建议这个:

local L = require( "lpeg" )

local function decorate( word )
  -- highlighting in UNIX terminals
  return "\27[32;1m"..word.."\27[0m"
end

-- matches characters that may be part of an identifier
local idchar = L.R( "az", "AZ", "09" ) + L.P"_"
-- list of keywords to be highlighted
local keywords = L.C( L.P"in" +
                      L.P"for" )

local function highlight( s )
  local p = L.P{
    (L.V"nosuffix" + "") * (L.V"exactmatch" + 1)^0,
    nosuffix = (keywords / decorate) * -idchar,
    exactmatch = L.B( 1 - idchar ) * L.V"nosuffix",
  }
  return L.match( L.Cs( p ), s )
end

-- tests:
print( highlight"" )
print( highlight"hello world" )
print( highlight"in 0in int for  xfor for_ |for| in" )

在开始“^root (\d*)\D?.* ”字符串后以非数字字符分隔后捕获1位或更多位数

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

答案 2 :(得分:0)

这将更宽容,更少依赖于空间数量,再次使用捕获组:

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

答案 3 :(得分:0)

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

Demo and Example

答案 4 :(得分:0)

尝试使用此目标字符串,根据您的要求提供输出。

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());
    }
}
}