2013-04-23 53 views
3

我曾问前这个问题,现在我编辑它,因为我发现,不符合我之前给了一些格式...行我想从提取的话“:”削减


这里的线的例子:

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“后面没有斜杠


这是我使用正则表达式:

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

我要的结果是 'SMTP',则第一个 'FAXG3.I0.0101' 和 'SMTP',“SMTP .0'为第二。 有人可以帮助纠正我的正则表达式来获得?

+0

看来你的正则表达式不太适合你的问题的标题。您正在检查**匹配后是否有0或更多':'**,而不是... – Loamhoof 2013-04-23 08:50:57

回答

3

你只需要改变正则表达式,它也接受'。'为有效字符,例如:

import re 
data = "This is a test message I Res O:Myself (KTP:SMTP/[email protected]) R:KTP:SMS.CLASS/+345854595 id:21" 
result = re.findall(r'[\w\.]+(?=:*/)',data) 
print result 

['SMTP', 'SMS.CLASS'] 

[\w\.]+说你会接受一个序列由至少一个“任何字母数字字符和下划线”(\w)或.\.的 - 它需要进行转义,因为.否则表示'任何字符')。

+0

感谢您的回复和解释=) – 2013-04-23 08:49:05

1

这应该工作:

result = re.findall(r'(?<=:)[\w.]+(?=/)',data) 

说 “的字母数字字符的序列:/之间(或下划线或点)”。