2013-04-23 70 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) 

說 「的字母數字字符的序列:/之間(或下劃線或點)」。