2013-10-22 32 views
0

我是Python的初學者,所以我對代碼優化有懷疑。我希望你能就此提出建議。 我解決下一個任務: 沒有與連續一個關鍵字和它的狀態,文字可以是不同的,例如:Python的正則表達式(或表達式)

... task1 .... success.... 
... task1 .... failed... 
... task1 .... inactive... 

我必須使用關鍵字來跟蹤這個狀態(我們也有不同任務)。

我的代碼:


list_of_tasks = ['task1','task2','task3'] 
list_of_states = ['success','inactive','failed'] 

for task in list_of_tasks: 
regex='|'.join(('.*'+task+'.*'+state+'.*') for state in list_of_states) 
pattern = re.compile (regex) 
for line in text: 
    m = re.match(pattern,str(line)) 
    if m: 
      #operational logic 

可這正則表達式更高效的方式來完成? 預先感謝您。

+0

任務和狀態之間是什麼?是這樣的:''blah bla foo bar zoo task1 abc def 12345 cat dog mike成功「,或者像這樣''task1成功'' –

回答

1

你也可以交替完成任務,所以你最終的正則表達式的樣子

(task1|task2|task3).*(success|inactive|failed) 

所以你必須一個正則表達式,你可以通過m.group(1)和狀態通過m.group(2)獲取任務名稱,但更重要的是重要 - 如果你的文件是形式實際上只是一堆線

TASK STATUS 

使用正則表達式是完全多餘的,你可以簡單地分爲上白字的字符串和檢索任務和狀態。正則表達式只有在看起來像是

so I did research on TASK statistics 123 $ time 30s process& STATUS leads to a conclusion that blah