[英]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.