我正在嘗試從包含數千行的日志中獲取子指標。這些線不相似,所以我需要在獲得子度量之前匹配一些值。
一些簡化的示例行
1, 2, acceptline,x,111, 100, , , 20, 20, end
1, 2, declineline,x,x, 100, 20, , end
1, 2, 3, acceptline,x,x, 1000, , 40, end
我嘗試在我的值匹配(接受行)之后獲取第三個逗號分隔列中的數值。
在我的示例中,這些值是 100 和 1000,但這些值基本上可以是任何數值
我已經成功地使用以下 java 正則運算式獲得了正確的 submetric 值
^.*acceptline. ?((?<submetric>,. ?){3}),.*
但是在那個正則運算式中,我得到了亞度量<, 100>或者那個數值是什么。現在我需要改進那個正則運算式,以便那些領先的 ??<, > 在被接受為 submetric 之前被洗掉。
uj5u.com熱心網友回復:
您可以使用
\bacceptline(?:,[^,]*){2},\s*(\d )
如果數字可以是浮點數,請使用\d*\.?\d 代替\d 。
請參閱正則運算式演示。詳情:
\b- 一個詞邊界acceptline- 一個字(?:,[^,]*){2}- 出現兩次逗號,然后出現零個或多個非逗號,- 逗號\s*- 零個或多個空格(\d )- 第 1 組:一位或多位數字。
查看Java 演示:
String string = "1, 2, acceptline,x,111, 100, , , 20, 20, end\n1, 2, declineline,x,x, 100, 20, , end\n1, 2, 3, acceptline,x,x, 1000, , 40, end";
String regex = "\\bacceptline(?:,[^,]*){2},\\s*(\\d )";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
// => 100 and 1000
uj5u.com熱心網友回復:
關于 regex101.com 我終于猜對了。
^.*acceptline. ?((,[^\,]*){1}),\s*(?<submetric>\d ).*
感謝 Wiktor 用這些 \s 和 \d 開關推動我正確的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337894.html
下一篇:使用gsub轉換模式
