2013-04-24 4 views
0

Я создаю скрипт, анализировать лог-файлы ... вот пример из линий:Регулярного выражения для получения строки

data = "09:55:04.125 mta   Messages  I Doc O:SERVER (NVS:SMTP/[email protected]) R:NVS:FAXG3.I0.0101 mid:6393" 
data2= "09:55:05.045 mta   Messages  I Doc O:SERVER (NVS:SMTP/[email protected]) R:ADMIN (NVS:SMTP.0/[email protected]) mid:6397" 

на первом я сопрягал что между косую черту и две точки, но я заметил, что есть некоторые линии, как первый, где тип «FAXG3.I0.0101» не через слэш


здесь это регулярное выражение I с нами е:

exp = result = re.findall(r'[\w\.]+(?=:*)',data) # type S & D 

результат я хочу 'SMTP', 'FAXG3.I0.0101' для первой строки и 'SMTP', 'SMTP.0' для второго. Может кто-то помочь в исправлении моего регулярного выражения, чтобы получить это?

ответ

1

Является ли «NVS:» гарантированно перед вашими матчами? Если да, то вы можете просто использовать NVS:([\w\.]+):

re.findall(r'NVS:([\w\.]+)',data) 
['SMTP', 'FAXG3.I0.0101'] 

re.findall(r'NVS:([\w\.]+)',data2) 
['SMTP', 'SMTP.0'] 
1

Следующая следует сделать трюк

>>> for x in re.finditer('(NVS:([\w.]+?)(\s|/))', data2): 
...  print x.groups()[1] 
... 
SMTP 
SMTP.0 
>>> for x in re.finditer('(NVS:([\w.]+?)(\s|/))', data): 
...  print x.groups()[1] 
... 
SMTP 
FAXG3.I0.0101 
Смежные вопросы