2015-05-27 3 views
0

Я новичок в Python и пытаюсь сделать простое, но понятное регулярное выражение для поиска файла, содержащий эти строки:Python регулярного выражения матч месяц, дата, время

месяц (2 буквы), день и время

Sep 15 04:34:02 

Regex пока: Мне удалось сопоставить месяц, но не знаю, как соответствовать пробелу и цифрам. Надеюсь, что кто-то может помочь мне с этим:

with open('file.txt','r') as file: 
      for line in file: 
        fil = re.findall('^\D{3}\d{1,2}',line) 
        print " ".join(fil) 
+0

ли все такие строки? –

ответ

3

Вы можете использовать следующее:

^\D{3}\s+\d{1,2}\s+\d{2}(:\d{2}){2} 

Объяснение:

  • \D{3} любые три не являющиеся цифры
  • \s+ один или более пробелы
  • \d{1,2} один на две цифры
  • \d{2} ровно две цифры
  • (:\d{2}){2} два вхождения (: следуют две цифры)

RegEx Demo

Подсказка 1: Чтобы сделать его более точным заменить \D с [a-zA-Z], потому что вы не хотите, чтобы какие-либо цифры не были здесь.

Подсказка 2: Вы также хотите использовать [0-2]\d(:[0-5]\d){2} для согласования времени ..

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

^[a-zA-Z]{3}\s+\d{1,2}\s+[0-2]\d(:[0-5]\d){2} 
+0

Спасибо! Как бы я совпадал с этим «sshd [12130]:« с цифрами внутри? –

+0

'[a-zA-Z] + \ [\ d + \]:' экранирование квадратных скобок. –

+0

''^\ D {3} \ s + \ d {1,2} \ s + \ d {2} \: \ d {2} \: \ d {2} \ s + \ li146-252 \ s + \ [a -zA-Z] + \ [\ d + \]: \ s + '', который не обрабатывает это (его последняя часть не соответствует: Sep 15 04:34:02 li146-252 sshd [12130]: –

0

Попробуйте:

[A-Za-z]{3}\s\d{1,2}\s(?:\d{1,2}:){2}\d{1,2} 

[A-Za-z]{3} -> три буквы -> Сен

\s -> пространство

\d{1,2} -> две цифры -> 15

\s -> пространство

(?:\d{1,2}:){2}\d{1,2} -> время -> 04:34:02

DEMO

Смежные вопросы