Maison >développement back-end >Tutoriel Python >Comment puis-je utiliser en toute sécurité les chaînes fournies par l'utilisateur comme modèles Regex en Python ?

Comment puis-je utiliser en toute sécurité les chaînes fournies par l'utilisateur comme modèles Regex en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-31 00:57:11806parcourir

How Can I Safely Use User-Supplied Strings as Regex Patterns in Python?

Échapper aux caractères regex dans les modèles fournis par l'utilisateur

Lors de l'utilisation des entrées utilisateur comme modèles d'expression régulière, il est crucial de résoudre le problème des caractères qui possèdent des significations particulières dans la syntaxe regex. Par exemple, l'intention de l'utilisateur de rechercher « Mot(s) » sera interprétée à tort comme un groupe par le moteur d'expression régulière en raison des parenthèses. Pour éviter cela, nous devons traiter les parenthèses comme des chaînes littérales, et non comme des symboles regex.

Approche conventionnelle : remplacement manuel

Une méthode pour échapper ces caractères consiste à manuellement remplacez chaque instance par sa version échappée. Par exemple, nous pourrions remplacer "(s)" par "(s)". Cependant, cela nécessite de considérer tous les symboles regex possibles, ce qui peut être laborieux.

Une meilleure solution : la fonction re.escape

Une solution plus efficace consiste à utiliser la fonction re.escape de Python Fonction .escape(), qui échappe automatiquement les caractères non alphanumériques dans une chaîne. Cela nous permet de traiter les caractères regex spéciaux comme des chaînes littérales.

Par exemple, pour rechercher n'importe quelle instance de « Mot(s) » dans un texte, nous pouvons utiliser :

def simplistic_plural(word, text):
    word_or_plural = re.escape(word) + 's?'
    return re.match(word_or_plural, text)

Cette fonction renvoie un objet match si le motif est trouvé dans le texte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn