2016-12-14 6 views
-2

私は、一致した単語の隣にある単語に一致するpython正規表現を書く必要があります。しかし次の言葉は次の行にあっても同じ行であってもかまいません。次の行を検索する

例:

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

system_checks3した後、新たなラインと、チェックの結果があります。

ように私は結果をしたい:私は最善の方法は、最初の場所で異なる出力形式を使用することだと思う

+1

あなたは質問をするのを忘れたようです。ポストには何の問題も述べられていない。 –

+0

私は結果が欲しい:system_checks2 PASS、system_checks3 PASSなど –

+0

私は正規表現はこれのための良いツールだとは思わない。まず、出力をより構造化したほうがよいでしょう。それが不可能な場合は、まだsplit()によっていくつかの結果が得られるかもしれません。たとえば、改行を削除し、その1つの長い文字列を作成し、split( "running")を呼び出すことをお勧めします。 012 []内の部分文字列を簡単に探すことができます – lhk

答えて

0

system_checks2 PASS 
system_checks3 PASS 

ので。 正規表現を使って出力を解析することはまれですが、あまりにも簡単にコードが破損することがあります。出力が変更され、プログラムが中断し、1か月後に正規表現を読み直すことは頭痛です。

出力フォーマットを変更できないと仮定しても、正規表現を使用しないことをお勧めします。あなたがPythonの関数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配列は現在含まれています

[ 'FAIL'、 'PASS'、 'PASS']

関連する問題