我试图想出一个正则表达式来匹配java堆栈跟踪中的模式。此正则表达式应标识字符串中的所有数字,但与java类对应的行号除外。
例如
str = "(SomeName.java:470) This is the 1st string out of a total of 50 string:345"
我想写一个标识1,50和345而不是470的正则表达式。
我提出了一个,但它并没有为我做到 - "(?<!.java:)[\d]*"
。
这得到70而不是470,原因是自我解释。
您能否帮我修改上述正则表达式以匹配示例中的模式?
答案 0 :(得分:1)
\d+(?![^(]*\))
试试这个。看看演示。
http://regex101.com/r/oE6jJ1/9
如果您有34)
这样的数据,请使用
^\([^)]*\)|(\d+)
并抓住捕获或组。参见演示。
答案 1 :(得分:1)
答案 2 :(得分:0)
Java代码:
String str1 = "(SomeName.java:470) This is the 1st string out of a total of 50 string:345";
String regex1 = "(?<!java:)\\b\\d+";
Matcher m = Pattern.compile(regex1).matcher(str1);
StringBuilder sb = new StringBuilder();
while (m.find()) {
sb.append(" "+str1.substring(m.start(), m.end()));
}
System.out.println(sb.toString());