Comment remplacer du texte entre deux balises personnalisées avec Python ?

Introduction

Les balises personnalisées comme

1
[MemberOnly]...\[/MemberOnly] ou <MemberOnly>...</MemberOnly>

sont souvent utilisées pour marquer des portions de texte nécessitant un traitement particulier, par exemple pour restreindre l’accès aux membres ou gérer la visibilité dans un système de gestion de contenu. Dans cet article, vous apprendrez à identifier, remplacer et manipuler le texte entre ces balises personnalisées à l’aide de Python et des expressions régulières.

Nous voulons :

  1. Remplacer le contenu situé entre deux balises personnalisées par un message de remplacement.
  2. Supprimer uniquement les balises tout en conservant le contenu.
  3. Détecter la présence de ces balises dans un texte.
  4. Choisir le format de balise le plus adapté.
  5. Styliser la section remplacée pour l’affichage HTML.

Remplacer le contenu entre deux balises

Si vous avez un contenu comme :

1
2
3
content = """dummy text dummy text 
[MemberOnly]cette partie est réservée[/MemberOnly]
plus de texte ici"""

Vous pouvez utiliser re.sub de Python pour remplacer toute la section :

1
2
3
4
5
6
7
8
import re

content_cleaned = re.sub(
    r"\[MemberOnly\].*?\[/MemberOnly\]",
    "<span class='member_only_section'>Ce contenu est réservé aux membres. Veuillez vous connecter pour y accéder.</span>",
    content,
    flags=re.DOTALL
)

Le paramètre re.DOTALL permet à l’expression régulière de correspondre au contenu sur plusieurs lignes.

Supprimer uniquement les balises en gardant le contenu

Si vous souhaitez conserver le contenu entre les balises tout en supprimant les balises elles-mêmes :

1
content_tagless = re.sub(r'\[/?MemberOnly\]', '', content)

Cela supprime à la fois [MemberOnly] et [/MemberOnly], tout en conservant le texte situé entre les deux.

Détecter la présence de balises

Vous pouvez vérifier si de telles balises sont présentes dans le contenu en utilisant re.search :

1
2
if re.search(r"\[MemberOnly\].*?\[/MemberOnly\]", content, re.DOTALL):
    print("Section réservée aux membres détectée")

Ou plus simplement :

1
2
if "[MemberOnly]" in content:
    print("Balise [MemberOnly] détectée")

Choisir le bon format de balise

Voici quelques formats de balises que vous pouvez utiliser selon vos besoins :

1
2
3
4
5
6
| Format                  | Exemple                                                 | Avantages                        |
| ----------------------- | ------------------------------------------------------- | -------------------------------- |
| Balises type HTML       | <member-only>contenu</member-only>                      | Compatible avec HTML/JavaScript  |
| Crochets (type BBCode)  | \[member\_only]contenu\[/member\_only]                  | Fréquent en texte brut           |
| Commentaires HTML       | <!-- member_only_start --> ... <!-- member_only_end --> | Invisible dans le rendu HTML     |
| Shortcodes (style Hugo) | {{< member\_only >}} ... {{< /member\_only >}}          | Courant dans les sites statiques |

Si vous prévoyez d’afficher le contenu en HTML, utilisez les balises avec chevrons ([HTML REMOVED]). Pour un environnement texte brut ou markdown, les crochets sont souvent plus simples à manipuler.

Optionnel : styliser la sortie HTML

Pour mettre visuellement en évidence la section réservée aux membres dans du HTML, vous pouvez utiliser le style CSS suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<style>
.member_only_section {
  background-color: #fff4cc;
  border: 1px dashed #ffaa00;
  padding: 1em;
  border-radius: 8px;
  font-style: italic;
  color: #555;
}
</style>

Et l’utiliser dans votre contenu HTML comme ceci :

1
<span class="member_only_section">Ce contenu est réservé aux membres. Veuillez vous connecter pour y accéder.</span>

Conclusion

Grâce aux expressions régulières de Python, il est facile de créer des outils flexibles permettant de parser et modifier du contenu contenant des balises personnalisées. Que vous construisiez un outil de publication, un CMS ou un préprocesseur markdown, cette approche rend votre pipeline simple et puissant.

Besoin de gérer des balises imbriquées ou plus complexes ? Envisagez d’utiliser un parseur dédié comme BeautifulSoup (pour le HTML) ou de construire un processeur markdown avec des extensions personnalisées.

Références

Liens Site
re — Expressions régulières en Python https://docs.python.org/3/library/re.html