Comment supprimer le balisage HTML d'un texte avec Google Sheets ?
Table des matières
Imagine : tu viens de scraper des blocs entiers de code HTML et tu dois en extraire le contenu texte.
Comment tu t'y prendrais pour supprimer automatiquement les balises et conserver uniquement le texte ?
J'ai souvent été confronté à ce problème, alors je te montre comment faire dans Google Sheets.
Étape 1 : trouver la bonne regex
Pour nettoyer ce code HTML, il faut d'abord trouver la regex qui va cibler tous les tags HTML présents.
L'expression régulière suivante devrait faire l'affaire : <[^>]+>
Explications :
- la chaîne doit commencer par un chevron ouvrant
<
- suivi de n'importe quel caractère sauf un chevron fermant
[^>]
, répété une ou plusieurs fois (+
) - suivi d'un chevron fermant
>
Problème : si le HTML contient des balises script, noscript, ou style, elles vont certes être supprimées, mais pas leur contenu.
Du coup, je vais affiner un peu mon expression régulière.
La voici : <((no)?script|style)[^<]+<\/((no)?script|style)>|<[^>]+>
Explications :
- la chaîne doit commencer par un chevron ouvrant
<
- suivi d'une balise script, noscript, ou style :
((no)?script|style)
- suivi de n'importe quel caractère, sauf un chevron ouvrant, répété une ou plusieurs fois
[^<]+
- suivi d'un chevron ouvrant et d'un slash
<\/
- suivi de noscript, script ou style
((no)?script|style)
- ...ou alors la chaîne doit matcher la première regex citée
<[^>]+>
Étape 2 : rechercher/remplacer dans Google Sheets
Maintenant que j'ai trouvé la regex, direction Google Sheets.
Je vais utiliser la fonction REGEXREPLACE
, en lui passant en arguments :
- le texte à remplacer
- l'expression régulière
- la chaîne de remplacement (chaîne vide)
Ce qui donne :
=REGEXREPLACE(A2;"<((no)?script|style)[^<]+<\/((no)?script|style)>|<[^>]+>";"")
Problème : les retours à la ligne dans le code sont présents aussi dans le texte de sortie.
Je vais donc utiliser à nouveau la fonction REGEXREPLACE
pour m'en débarrasser (je les remplace par un seul et unique retour à la ligne avec CHAR(10)
).
J'utilise également TRIM
pour supprimer les espaces (début et fin) + les doubles espaces.
=TRIM(REGEXREPLACE(REGEXREPLACE(D11;"<((no)?script|style)[^<]+<\/((no)?script|style)>|<[^>]+>";"");"\n+";CHAR(10)))
Si des espaces traînent encore dans le code, tu pourras les supprimer avec REGEXREPLACE
de cette façon :
=REGEXREPLACE(B2;"\s{3,}";" ")
Et voilà !
- Partager sur Twitter
- Partager sur Facebook
- Partager sur LinkedIn
- Partager sur Pinterest
- Partager par E-mail
- Copier le lien
Un Template Google Sheets Offert ! 🎁
Rejoins ma newsletter et reçois une astuce SEO chaque mercredi ! En cadeau, je t'offre un template Google Sheets avec 50 fonctions de scraping prêtes à l'emploi.