Использование регулярных выражений для моего журнала ошибок в Java

#regex

#регулярное выражение

Вопрос:

Я пытаюсь использовать регулярные выражения для разбора текста следующим образом:

 '''ErrorID:  951574305
Time:     Mon Apr 25 16:01:34 CEST 2011
URL:      /documents.do
HttpCode: null
Error:    class java.lang.NullPointerException: null''' 
  

Где ключевые слова errorID: , Time: , URL: всегда одинаковы, и мне нужно их искать. Как мне проанализировать этот текст?

Комментарии:

1. Кажется излишним для regex … вы могли бы просто разделить на новую строку, затем двоеточие и обрезать пробелы.

Ответ №1:

 import re
re.findall("ErrorID:s (.*)", text)
# ['951574305']
re.findall("Time:s (.*)", text)
# ['Mon Apr 25 16:01:34 CEST 2011']
re.findall("URL:s (.*)", text)
# ['/documents.do']
  

Регулярное выражение работает следующим образом: оно совпадает с ErrorID: (или другим разделителем) плюс некоторые пробелы, плюс остальная часть строки до новой строки / конца строки. Затем он возвращает это «что-то» после пробела. Также результатом будет список, в котором вам понадобится первый элемент.
Могут быть другие стратегии поиска того, что вам нужно, но я нашел эту наиболее подходящей.

Комментарии:

1. мне нужно просто совпадающее регулярное выражение для этого шаблона, меня не волнуют значения.

Ответ №2:

Если ваша реализация поддерживает именованные группы…

 /ErrorID:s (?<ID>.*)nTime:s (?<Time>.*)nURL:s (?<URL>.*)/g
  

Затем вы можете ссылаться на них по имени.

В противном случае по индексу

 /ErrorID:s (.*)nTime:s (.*)nURL:s (.*)/g
  

1 доллар за идентификатор, 2 доллара за время и 3 доллара за URL.

Ответ №3:

Если вам требуется все это в строке, но вы не знаете, где они находятся, и можете использовать предварительные утверждения:

(?=[Ss]*ErrorID:)(?=[Ss]*Time:)(?=[Ss]*URL:)