2016-12-14 40 views
-2

我需要編寫一個python正則表達式來匹配匹配單詞旁邊的單詞。但下一個字可以在下一行或可以是同一行。搜索下一行

如:

""" 
Running /health_checks/system_checks1  [ FAIL ] 
Running /health_checks/system_checks2  [ PASS ] 
Running /health_checks/system_checks3   
             [ PASS ] 
""" 

system_checks3之後有新的線路,然後檢查結果。

我要像結果:

system_checks2 PASS 
system_checks3 PASS 

+1

您似乎忘記提問了。這篇文章沒有說明問題。 –

+0

我想要的結果是這樣的:system_checks2 PASS,system_checks3 PASS等 –

+0

我不認爲正則表達式是一個很好的工具。最好的做法是首先讓輸出更加結構化。如果這是不可能的,你仍然可以通過split()獲得一些結果。例如,刪除換行符,創建一個長字符串,並調用split(「運行」)似乎是個好主意。那麼你可以輕鬆地在[]內尋找子字符串 – lhk

回答

0

我認爲最好的辦法是首先使用不同的輸出格式。 使用正則表達式來解析輸出不是一個好主意,代碼只是太容易打破了:在某些時候輸出會改變,程序會中斷,並且在一個月後再次讀取正則表達式會讓人頭疼。

假設你不能改變輸出格式,那麼我仍然建議不要使用正則表達式。你可能想看看到蟒蛇功能split(),這裏是使用它的一個版本:

string=""" 
Running /health_checks/system_checks1  [ FAIL ] 
Running /health_checks/system_checks2  [ PASS ] 
Running /health_checks/system_checks3   
             [ PASS ] 
""" 

# remove newlines 
string = string.replace("\n", "") 

# split into individual jobs 
jobs=string.split("Running") 

# remove empty strings 
jobs=[job for job in jobs if job!=""] 

# take only the part with the result 
results=[] 
for job in jobs: 
    # separate in the process name and the result 
    # assuming the result is always wrapped in [] 
    # then [ can be used as a delimiter 
    splitted=job.split("[") 

    # splitted contains the job name and the result 
    result=splitted[1] 

    # remove the trailing ] 
    result=result.replace("]","") 

    # remove whitespace 
    result=result.strip() 

    results.append(result) 

results數組現在包含:

[ '失敗', 'PASS', 'PASS']