Почему символ "\ n" появляется в результатах сопоставленного регулярного выражения? - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь проанализировать файл журнала и извлечь определенные группы захвата, такие как метки времени, имя пользователя и т. Д. Когда я выполняю следующий код, результатом является элемент списка с кортежами, вложенными внутрь в качестве групп захвата.(или результаты поиска).По сути, мне было любопытно, почему я получаю символ '\ n' в одной из моих групп захвата, я не хочу этого там.

Я пытался изменить шаблон регулярных выражений, но не смог решить проблему.

import re

with open('obis1-query.log') as myfile:  
    StartTime = []
    myfile = myfile.read()
    mysearch = re.findall('(?P<datetime>\d+-\d+-\d+T\d+:\d+:\d+.\d+-05:00).\s.\w+.\s.\w+:\d.\s.+ecid:\s[A-Za-z\d,:-]+.\s.sik:\s\w+.\s.tid:\s\w+.\s.messageid:\s\w+-\d+.\s.requestid:\s\w+.\s.(?P<sessionid>sessionid:\s\w+).\s.(?P<username>username:\s\w+).\s#+\s\[\[\s-+\sSQL\sRequest,\s(?P<logreqhash>logical\srequest\shash:\n?\w+)', myfile)

if mysearch != None:        
    StartTime.append(mysearch)  
    print(StartTime)

Вывод выглядит следующим образом:

[[('2019-06-12T09:14:54.947-05:00', 'sessionid: bf710000', 'username: 
kadaniel', 'logical request hash:\n83bf7e6f'), ('2019-06-12T09:14:55.343- 
05:00', 'sessionid: bf710000', 'username: kadaniel', 'logical request 
hash:\n8e45939b'), ('2019-06-12T09:14:55.362-05:00', 'sessionid: 
bf710000', 'username: kadaniel', 'logical request hash:\n4496de01'),

Мне просто нужен символ '\ n' между 'логическим хешем запроса:' и 'следующим числом' (в последнем случае, 4496de01) удаляется из результатов.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Вы читаете весь файл в строку и затем ищете эту строку.Файл (и, следовательно, строка) содержит экземпляры '\ n', которые сопоставляются.

Подумайте об использовании

for line in myfile.readlines():
    # Search line for regex

Для анализа одной строки за раз, которая по своей сути не учитываетидентификаторы новой строки.

0 голосов
/ 08 июля 2019

Попробуйте удалить символ \n с помощью .replace("\n", "")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...