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 ?
Réponses
Trop de publicités?Utiliser l' re.escape()
de la fonction pour cela:
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)
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\\.\\*\\$'