簡體   English   中英

通過Java中的Regex從String中提取數字

[英]Extracting numbers from String through Regex in Java

我創建了一個程序,該程序從油灰中獲取字符串,並從該字符串中獲取processID,從而殺死了processID。 目前,它工作正常,但有時不可靠。

請在下面找到我使用的目標和正則表達式。

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

我使用的RegEx\\\\\\d{3,5}

我想獲得RegEx,它可以找到root之后的立即數,而忽略其他文本。 (例如,我想從示例字符串中提取14139,以刪除所有多余的空間。)

我該怎么做?

因此,您需要第二個字段中以空格分隔的數字。 以下正則表達式在捕獲組中將其獲取:

^\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

我建議這個:

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

在起始“ root ”字符串后捕獲1個或多個數字,並用非數字字符分隔

測試人員: https//regex101.com/r/sL8oJ7/1

再次使用捕獲組,這會更加寬容,並減少對空間數量的依賴:

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

您可以使用以下正則表達式並使用第一組: root[^\\S]*(\\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());
    }
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM