Regex извлекает часть файла журнала на две строки выше ключевого слова - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь написать сценарий Python, чтобы помочь с анализом файла журнала для поиска отметок времени на основе уникального идентификатора . Файл очень длинный, и уловки, которые я пробовал, выделяли все над строкой ключевого слова. В идеале я бы хотел, чтобы к нему было добавлено ключевое слово (ID) и соответствующее регулярное выражение для максимальной ясности; я постараюсь добиться этого с помощью Python. Но могу ли я спросить, может ли кто-нибудь помочь мне улучшить выражение регулярного выражения для следующего кода. Попытка регулярного выражения, которая выбирает все над _id :

((.*\n){2}).*8355371640847

И рассматриваемый код:

 ...
    ...
    ..
    ..
    _ommited everythig: *ignore everything beyond*
    createTime: 2020-06-03T16:01:35.812Z --only this line to be selected
    employee:
      _id: 835537164084782 -- ID that is used as a reference to return 'createTime' two lines above
      code: null
      ...
      ...
      ...

Ответы [ 3 ]

0 голосов
/ 17 июня 2020

Доброе утро, не понимаю на то, что определенно пробовал несколько раз. Но код:

((.*\n){2}).*8355371640847

действительно выполняет свою работу; он выбирает только строку, которая находится на две строки выше строки поиска. Вчера та же строка выбрала все , но, возможно, ей пришлось что-то делать, как я копирую / вставляю дамп БД.

Спасибо.

0 голосов
/ 17 июня 2020

Надеюсь, вы пытаетесь получить этот

a = """ _ommited everythig: *ignore everything beyond*
    createTime: 2020-06-03T16:01:35.812Z --only this line to be selected
    employee:
      _id: 835537164084782 -- ID that is used as a reference to return 'createTime' two lines above
      code: null """
x = re.compile('([^\n]*\n[^\n]*\n)[^\n]*8355371640847')
print (x.findall(a))
x = re.compile('([^\n]*\n)[^\n]*\n[^\n]*8355371640847')
print (x.findall(a))

вывод: ['createTime: 2020-06-03T16: 01: 35.812Z - выбирается только эта строка \ n сотрудник: \ n '] [' createTime: 2020-06-03T16: 01: 35.812Z - выбирается только эта строка \ n ']

0 голосов
/ 16 июня 2020

попробуйте это (([^ \ n] \ n [^ \ n] \ n)). * 8355371640847

...