#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:)