Je pense que la meilleure façon serait d'utiliser un autre format de sortie en premier lieu. Utiliser regex pour analyser la sortie est rarement une bonne idée, le code se casse trop facilement: à un certain point, la sortie sera modifiée, votre programme se cassera, et lire regex à nouveau après un mois est un mal de tête.
En supposant que vous ne pouvez pas modifier le format de sortie, je recommanderais quand même de ne pas utiliser d'expressions rationnelles. Vous voudrez peut-être regarder dans la fonction python split()
, voici une version utilisant:
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)
Le tableau results
contient maintenant:
[ 'FAIL', 'PASS', 'PASS']
Vous semblez avoir oublié de poser une question. Aucun problème n'est indiqué dans le message. –
Je veux le résultat comme: system_checks2 PASS, system_checks3 PASS et ainsi de suite –
Je ne pense pas regex est un bon outil pour cela. Le mieux serait de rendre la production plus structurée en premier lieu. Si cela est impossible, vous pouvez toujours obtenir des résultats avec split(). Par exemple, il semble que ce soit une bonne idée de supprimer simplement les sauts de ligne, de créer une longue chaîne et d'appeler split ("running") dessus. alors vous pouvez rechercher la sous-chaîne dans [] facilement – lhk