我正在创建一个解析日志文件的脚本......以下是这些行的示例:
data = "09:55:04.125 mta Messages I Doc O:SERVER (NVS:SMTP/me@domain.com) R:NVS:FAXG3.I0.0101 mid:6393"
data2= "09:55:05.045 mta Messages I Doc O:SERVER (NVS:SMTP/me@domain.com) R:ADMIN (NVS:SMTP.0/me@domain.fr) mid:6397"
起初我已经匹配斜线和两点之间的东西,但我注意到有一些线条像第一个类型“FAXG3.I0.0101”后面没有斜线
这是我使用的正则表达式:
exp = result = re.findall(r'[\w\.]+(?=:*)',data) # type S & D
我想要的结果是“SMTP”,第一行是“FAXG3.I0.0101”,第二行是“SMTP”,“SMTP.0”。 有人可以帮我纠正我的正则表达式吗?
答案 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 :(得分: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