277 votes

Chaîne d'expression régulière en Python

Je veux utiliser l'entrée en provenance de l'utilisateur comme une expression régulière pattern pour une recherche sur certains textes. Il fonctionne, mais comment je peux gérer les cas où l'utilisateur met des caractères qui ont une signification en regex? Par exemple, l'utilisateur souhaite effectuer une recherche par Mot - (s): moteur d'expressions régulières prendra l' (s) en tant que groupe. Je veux qu'il à le traiter comme une chaîne de caractères "(s)" . Je peux courir replace sur la saisie de l'utilisateur et de remplacer l' ( avec \( et de la ) avec \) mais le problème est que j'ai besoin de faire remplacer pour tous les regex symbole. Connaissez-vous une meilleure façon ?

377voto

ddaa Points 19102

Utiliser l' re.escape() de la fonction pour cela:

4.2.3 re Module De Contenu

d'échappement(string)

Retourne la chaîne avec tous les caractères alphanumériques backslashed; ceci est utile si vous voulez correspondre à l'arbitraire d'un littéral de chaîne de caractères qui peut avoir régulièrement l'expression des caractères de remplacement.

Un exemple simpliste, recherche toutes les occurrences de la chaîne de suivi éventuellement d'un "s", et le retour de l'objet match.

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

63voto

gimel Points 30150

Vous pouvez utiliser re.escape () :

re.escape (string) Renvoie la chaîne avec tous les backslashs non alphanumériques; Ceci est utile si vous souhaitez faire correspondre une chaîne littérale arbitraire pouvant contenir des métacaractères d'expression régulière.

 >>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X