Extraction du texte brut d'un document HTML⚓︎

On dispose d'une chaine de caractères représentant une portion de code HTML et on souhaite écrire une fonction texte_brut qui supprime toutes les balises HTML de cette chaîne et renvoie le texte brut qu'il contient.

On rappelle qu'une balise HTML s'écrit sous la forme <nom_balise> ou </nom_balise>.

Si l'on considère par exemple le code html = "<p>un <strong>exemple</strong> de chaine</p>" alors l'appel texte_brut(html) renverra 'un exemple de chaine'.

On admet :

  • qu'un caractère < déclarant une ouverture de balise est toujours suivi plus loin dans la chaîne d'un caractère > ;
  • qu'il n'y a jamais de balises imbriquées.
Exemples
>>> html = "<p>un <strong>exemple</strong> de chaine</p>"
>>> texte_brut(html)
'un exemple de chaine'
>>> html = "<h1>un grand titre en <span style='color: red'>rouge</strong> !</h1>"
>>> texte_brut(html)
'un grand titre en rouge !'
Sur la présentation des tests

Afin d'éviter des problèmes d'affichage de la page, les balises ont été découpées dans le fichier Python.

Ainsi "<p>" devient "<"+"p"+">".

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013(lbsSetxph4rd;5f1890uma"ovT+w7g_F/3=in 6k:)y q2Pc030h0a0b0r0F06080N0R060r08080E0s0b0F0d0s020H03080p0q0q0r0g0M02090t060p0+0t0G030C0=0@0_0{0:0d02031b141e0C1b0:0h0F0u0!0$0'0)0e0F0z0e061s0e0b0.030V07060a1n0%0(0s1r1t1v1t0b1B1D1z0b0g1c0b0e0!0~080d0r0G0)0P0s1F1p0s0k0X0a0G0r0q0a1z1Y1!1(1H1+1D1.1:0.040N0Q0g0t0d0t080F110G0N0T1W0g0g0a0R28141?0G1c0C1U2l1R1T1S1A0h1^0)1v0G1-251z1k1m0#1G2v0F2x0G0t2B1z0d2e1c2j2l2P0;1Z292D1)2I0g0^060.0N0l2i2T0/2S1@2V1H2X2Z2#0P2'1!2)2j2u0s2.0r2!020N0D2=2k0:2^2,0)2{2}0N0f312@2T2_372#0j3b333d352`0t2Y2|2#0I3i2*2U1o2-3n2/2~0y3s343v363x3p2~0m3B3k3D3m3o380n3J2+3L3f020l0o3Q3u2E3M3y0l2%152(1f2N142B2o0h1T2t3l0R2J1;1c3,1d3*2R3'2?033=0T2O3K3Z0J0.0T0k3b0N3t3e0k0.0b0a0c4f0A070g103b4b3l0-02054n3C3Z0G0.1x0q064t431)4q0L0K3i0N4I4a4u2W0.2e0=060V0b494o3L0t0.0E4T4L1H081%02000O0p0t0b0i4(4*4,4H4J4U4v0.072|0F080a4Z4C1H4W024Y3}2k4K4 0)0J0R0.0B2|4|4;4I4?1)45020k3n4~3R4@020R5n3Y1)0t0x0.2G5s3e4x0b4z4B5o4D0.4G540/4J5L565F1H5j0F485J5N5t2-0.5r5T5h504X532P5U2_4$0.4.4+4-4Q4-4)5-5E5V0)4q5I2P0H5M5}5(3l4w024_1v5e5Z4!0)515%2(5 3L590.0v4l4}5J5|5~5!580.0a1v5S5'6m2`5X5z3l696a2?6c3Z5*4'5;4,000z6G6F0i5?2_5_5f5~5g676u624`656s6S696w6d5a025c0Y6i5{6Q6t5j6p5R6!3Z5v0.2I4S66576T634{6)3(6S6O6j6Q5L6t614O0p4Q0r6^6X6`510w6z55756v724=6S5j2e0b0p0g136_5O364N0a4P4R3s0C400a2l2M7D3+1l3-2o2r2m0r1C7G0C3,0:7Q0U0W0Y02.