2015-01-10 146 views
0
text = "       ABCD-10630Re: Alert: abc.server.com/kafka stauts Status,ABCD-10629Re: Alert: db01.server.com/Replication lag,ABCD-10601Re: Alert: web-app.server.com/apache service down check,ABCD-10571Re: Alert: slave01.server.com/Replication lag, 
" 

我從curl輸出中獲得了上述文本,並清除了一些HTML標記。我希望能夠從其他文本中分離票據(請參見下面的示例),並使用python單獨打印它們。python中的分割線

例子:

ABCD-1063O   Re: Alert: abc.server.com/kafka stauts Status, 
ABCD-10629   Re: Alert: db01.server.com/Replication lag, 
. 
. 
. 

請幫助。

+0

你嘗試任何事情,還是你只是希望有人爲你做你的工作? – msw

+0

你真的需要保持','嗎?如果不是,你可以像這樣分割它text.split(',') – tinySandy

回答

0

你可以使用re.findall

>>> text = "       ABCD-10630Re: Alert: abc.server.com/kafka stauts Status,ABCD-10629Re: Alert: db01.server.com/Replication lag,ABCD-10601Re: Alert: web-app.server.com/apache service down check,ABCD-10571Re: Alert: slave01.server.com/Replication lag, " 
>>> re.findall(r'([A-Z]+-\d+)(Re[^,]+,)', text) 
[('ABCD-10630', 'Re: Alert: abc.server.com/kafka stauts Status,'), ('ABCD-10629', 'Re: Alert: db01.server.com/Replication lag,'), ('ABCD-10601', 'Re: Alert: web-app.server.com/apache service down check,'), ('ABCD-10571', 'Re: Alert: slave01.server.com/Replication lag,')] 
>>> for (x,y) in re.findall(r'([A-Z]+-\d+)(Re[^,]+,)', string): 
     print(x+"\t"+y) 


ABCD-10630 Re: Alert: abc.server.com/kafka stauts Status, 
ABCD-10629 Re: Alert: db01.server.com/Replication lag, 
ABCD-10601 Re: Alert: web-app.server.com/apache service down check, 
ABCD-10571 Re: Alert: slave01.server.com/Replication lag, 
+0

它工作。非常感謝Avinash。 – rickydj

1
split_list = text.split(',') 

for i in range(len(split_list) - 1): 
    re_index = split_list[i].index('Re') 
    print "{0}  {1}".format(split_list[i][0:re_index].strip(), split_list[i] 
    [re_index:].strip()) 
+0

加1,用於使用python內建插件,但請注意,使用'index('Re')'不是一種有效的方法,因爲它可能在文本中存在另一個'Re'。在這種情況下,更好地使用基於環視的「正則表達式」。也總是將你的代碼的結果添加到答案中。 – Kasramvd

0

這不是很可靠,但它可能適合你的目的:

mylist = text.split(',') 
for i in mylist: 
    print (i);