Я застрял, пытаясь придумать регулярное выражение, чтобы соответствовать шаблону в трассе 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, и причина объясняет сам.
Не могли бы вы помочь мне с модификацией указанного выше регулярного выражения, чтобы он соответствовал шаблону из примера?
\d+(?![^(]*\))
Попробуйте это. Смотрите демоверсию.
http://regex101.com/r/oE6jJ1/9
Если у вас есть такие данные, как 34)
использование
^\([^)]*\)|(\d+)
и захватить захваты или группы. См. демонстрацию.
(?<!java:)(?<!\d)\d+
.
Код 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());