簡體   English   中英

使用正則表達式(Java)從這些字符串中提取子字符串

[英]Extract substring from these strings using regex (Java)

我正在嘗試使用Java從以下字符串中提取TPS編號-字符串將從文件中讀取,因此字符串可以按任何順序出現(事先不知道),例如,我不知道我在處理哪個字符串與-可能是這兩個之一:

Testing performance TPS..  ok. (795 TPS recorded for run)

Testing performance TPS..  warning: TPS seems low - it was 10 TPS and I expected to achieve over 50

例如,對於第一個字符串,我想要數字795,對於第二個字符串,我想要數字10。

有誰知道如何使用正則表達式或使用Java的類似方法做到這一點?

非常感謝

您需要在輸入中找到第一組數字字符。 該數字以空格結尾。

您可以使用此正則表達式:

    String regex = "[^\\d]+(\\d+) .*";

該數字在組1( $1 )中捕獲。

這是一個簡單的測試:

public static void main(String[] args) throws Exception {

    String[] lines = {
        "Testing performance TPS..  ok. (795 TPS recorded for run)",
        "Testing performance TPS..  warning: TPS seems low - it was 10 TPS and I expected to achieve over 50"
    };

    String regex = "[^\\d]+(\\d+) .*";
    Pattern p = Pattern.compile(regex);
    for (String s: lines) {
        Matcher m = p.matcher(s);
        if (m.matches()) {
            System.err.println(m.group(1));
        }
    }
}

輸出為:

795
10

如果您一直在尋找一個整數,后跟字符串“ TPS”,則可以這樣做

"(\\d+) TPS"

但是,您最好確保它始終是這種格式-如果可能的話,最好修改輸出格式。

這個正則表達式可以解決這個問題:

    ^[^0-9]*([0-9]+).*$

它匹配包含數字的任何行,並提取該行中的第一個數字。

但是,實際上不可能僅從這兩個示例進行概括。 例如,您沒有向我們展示正則表達式匹配的示例。


我同意這樣的說法,即這是提取信息的簡單方法。 除非您非常確定自己的輸入文本,否則總有可能會遇到正則表達式無法處理的其他形式; 例如在不應該匹配時匹配, 反之亦然

暫無
暫無

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

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