2016-08-04 80 views
0

我創建了一個程序,它從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] + –

回答

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

+0

你的代碼在演示中有效,但是如何在java代碼中使用它們,它給了我錯誤信息。 – mashkurm

+0

https://ideone.com/LVLCNm –

+0

什麼錯誤信息? –

0

這會有點更寬容和較少依賴於空格數,再次使用捕獲組:

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

0

您可以使用下面的正則表達式,並使用第一組:root[^\S]*(\d+)

Demo and Example

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