我想将“:”中的单词提取为斜杠

时间:2013-04-23 08:40:33

标签: python regex python-2.x

之前我已经问过这个问题,现在我编辑它,因为我发现了一些与我之前给出的格式不符的行......


这是一个行的例子:

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”。 有人可以帮我纠正我的正则表达式吗?

2 个答案:

答案 0 :(得分:3)

您只需更改正则表达式,使其也接受'。'作为有效字符,例如:

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

['SMTP', 'SMS.CLASS']

[\w\.]+表示您接受的序列至少包含一个'任何字母数字字符和下划线'(\w)或.\. - 它需要转义,因为.否则意味着“任何角色”。)

答案 1 :(得分:1)

这应该有效:

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

:/之间说“一系列字母数字字符(或下划线或点)。