CommencerCommencez gratuitement

Fermez la balise, s’il vous plaît !

En parallèle, vous travaillez sur un autre de vos projets. L’entreprise va développer un nouveau produit pour aider les développeurs à vérifier automatiquement le code qu’ils écrivent. Vous devez écrire un petit script qui contrôle que chaque balise HTML ouverte est correctement fermée.

Voici un exemple de chaîne contenant des balises HTML :

<title>The Data Science Company</title>

Vous apprenez qu’une balise HTML ouvrante se trouve toujours au début de la chaîne. Elle apparaît entre <>. Une balise fermante apparaît également entre <>, mais elle est précédée de /.

Vous vous souvenez aussi que les groupes capturants peuvent être référencés par des numéros, par exemple \4.

La liste html_tags, qui contient trois chaînes avec des balises HTML, ainsi que le module re, sont chargés dans votre session. Vous pouvez utiliser print() pour afficher les données dans l’IPython Shell.

Cet exercice fait partie du cours

<cours>Expressions rationnelles en Python</cours>
Voir le cours

Instructions de l’exercice

  • Complétez la regex afin de faire correspondre les balises HTML correctement fermées. Recherchez une correspondance dans chaque chaîne de la liste html_tags. Affectez le résultat à match_tag.
  • Si une correspondance est trouvée, affichez le premier groupe capturé et enregistré dans match_tag.
  • Si aucune correspondance n’est trouvée, complétez la regex pour ne faire correspondre que le texte à l’intérieur de la balise HTML. Affectez-la à notmatch_tag.
  • Affichez le premier groupe capturé par la regex et enregistrez-le dans notmatch_tag.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

for string in html_tags:
    # Complete the regex and find if it matches a closed HTML tags
    match_tag =  re.match(____"<____>.*?", ____)
 
    if match_tag:
        # If it matches print the first group capture
        print("Your tag {} is closed".format(match_tag.____(____))) 
    else:
        # If it doesn't match capture only the tag 
        notmatch_tag = re.match(____"<____>", ____)
        # Print the first group capture
        print("Close your {} tag!".format(notmatch_tag.____(____)))
Modifier et exécuter le code