Regex - трассировка стека - соответствует всем числам, кроме номера строки класса Java

1

Я застрял, пытаясь придумать регулярное выражение, чтобы соответствовать шаблону в трассе 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 также следует считать. Извините, это была опечатка.
Теги:
string

3 ответа

1
\d+(?![^(]*\))

Попробуйте это. Смотрите демоверсию.

http://regex101.com/r/oE6jJ1/9

Если у вас есть такие данные, как 34) использование

^\([^)]*\)|(\d+)

и захватить захваты или группы. См. демонстрацию.

http://regex101.com/r/oE6jJ1/11

  • 0
    Потрясающие! Большое спасибо.
  • 0
    Я попытался изменить тестовую строку, скажем, если у меня есть а) после числа, которое не учитывается. Скажите в конце, если есть: 345) 345 игнорируется. Хотел, чтобы вы знали. В любом случае, спасибо.
Показать ещё 1 комментарий
1

Вы можете изменить свое утверждение lookbehind следующим образом.

(?<!java:)\b\d+

Демо-версия

  • 1
    Если после границы, не состоящей из слов, у вас есть цифра, вы можете использовать (?<!java:)(?<!\d)\d+ .
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());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню