Python >> Tutoriel Python >  >> Python Tag >> RegEx

Avez-vous besoin d'échapper un point dans une classe de caractères Python Regex ?

Question

Récapitulez les concepts d'expression régulière suivants (plus de détails dans l'article ci-dessous) :

  • Le caractère point . dans les expressions régulières correspond à n'importe quel caractère à l'exception du caractère de saut de ligne. Par exemple, le modèle 'c.t' correspondra aux chaînes 'cat' , 'cut' , ou 'czt' .
  • La classe de caractères [ ] est un ensemble de caractères :si vous l'utilisez dans un modèle de regex, le moteur correspondra exactement à un caractère de l'ensemble. Par exemple, le modèle 'c[auz]t' correspondra aux chaînes 'cat' , 'cut' , ou 'czt' .
  • Les caractères spéciaux tels que le caractère point doivent souvent être échappés dans un modèle regex si vous voulez les faire correspondre. Par exemple, pour faire correspondre le point réel '.' caractère, vous devez concevoir un motif avec un point échappé '\.' . En d'autres termes, le modèle 'hello\.' correspondrait à la chaîne 'hello.' mais pas la chaîne 'hello!' .

Question :

Avez-vous besoin d'échapper le caractère point dans une classe de caractères Python regex ?

Répondre

Non, vous n'avez pas besoin d'échapper le caractère point dans une classe de caractères. Ceci vaut pour le Python re et le nouveau Python regex modules.

La raison est que dans une classe de caractères, tout caractère sauf ^ , - , ] ou \ sont des littéraux, c'est-à-dire qu'ils ont perdu leur signification particulière s'ils en avaient.

Le caractère moins

Par exemple, le moins '-' caractère a une signification spéciale dans la classe de caractères, c'est le caractère de plage dans le modèle '[a-z]' .

Cependant, le moins est également considéré comme un caractère littéral normal s'il s'agit de la première ou de la dernière valeur d'une classe de caractères. Python sait que le moins comme premier ou dernier caractère ne peut pas signaler une plage car la plage ne serait pas ouverte ou fermée (par exemple, les modèles [-z] ou [a-] ).

Le personnage du chapeau

Le caractère spécial du chapeau '^' signifie regex de début de ligne. Il a une autre signification particulière lorsqu'il est utilisé comme premier caractère de la classe de caractères (=classe de caractères négative ).

Cependant, il perd sa signification particulière lorsqu'il n'est pas le premier caractère. Donc, si vous voulez faire correspondre le '^' symbole, vous pouvez l'utiliser comme non-premier caractère dans une classe de caractères (par exemple, modèle [ab^c] ).

💡 Remarque  :Cela ne fait pas de mal d'échapper à la regex point ou à tout autre symbole spécial dans la classe de caractères - Python l'ignorera simplement !

Récapitulons quelques-uns des concepts de base plus en détail ensuite !

Comprendre le point Regex

Le point regex . correspond à tous les caractères sauf le caractère de saut de ligne.

Par exemple, l'expression régulière '...' correspond aux chaînes 'hey' et 'tom' . Mais cela ne correspond pas à la chaîne 'yo\nto' qui contient le caractère de saut de ligne '\n' . Combiné avec le quantificateur astérisque dans le modèle '.*' , l'expression régulière point correspond à un nombre arbitraire de symboles, à l'exception des caractères de saut de ligne.

Pour en savoir plus, consultez notre tutoriel de blog détaillé :

  • Regex point Python

Comprendre les classes de personnages

Le jeu de caractères (ou classe de caractères) est, surprise, un jeu de caractères :si vous utilisez un jeu de caractères dans un modèle d'expression régulière, vous dites au moteur de regex de choisir un caractère arbitraire dans le jeu. Comme vous le savez peut-être, un ensemble est une collection non ordonnée d'éléments uniques . Ainsi, chaque caractère d'un jeu de caractères est unique et l'ordre n'a pas vraiment d'importance (à quelques exceptions mineures près).

Voici un exemple de jeu de caractères utilisé dans une expression régulière :

>>> import re
>>> re.findall('[abcde]', 'hello world!')
['e', 'd']

Pour en savoir plus, consultez notre tutoriel de blog détaillé :

  • Classe de caractères Python

Comprendre les caractères spéciaux