'[A-Za-z0-9-_]*'

'^[A-Za-z0-9-_]*$'

Je veux vérifier si une chaîne ne contient que le signe dans l'expression ci-dessus, je veux juste m'assurer qu'il n'y a plus de signe bizarre comme #%&/() dans les chaînes.

Je me demande s'il y a une différence entre ces deux expressions régulières? Le signe de début et de fin importait-il? Cela affectera-t-il le résultat d'une manière ou d'une autre?

0
manxing 14 déc. 2011 à 19:27

3 réponses

Meilleure réponse

Les signes de début et de fin correspondent au début et à la fin d'une chaîne.

Le premier correspondra à toute chaîne contenant zéro ou plusieurs occurrences de la classe [A-Za-z0-9-_] (essentiellement n'importe quelle chaîne ...).

Le second correspondra à une chaîne vide, mais pas à celle contenant des caractères non définis dans [A-Za-z0-9-_]

1
pcalcao 14 déc. 2011 à 15:38

Les expressions régulières Python sont ancrées au début des chaînes (comme dans de nombreux autres langages): le signe ^ au début ne fait donc aucune différence. Cependant, le signe $ en fait vraiment un: si vous ne l'incluez pas, vous allez seulement faire correspondre le début de votre chaîne, et la fin pourrait contenir n'importe quoi - y compris les caractères que vous souhaitez exclure . Essayez simplement re.match("[a-z0-9]", "abcdef/%&").

En plus de cela, vous voudrez peut-être utiliser une expression régulière qui exclut simplement les caractères que vous testez, c'est beaucoup plus sûr (d'où [^#%&/()] - ou peut-être que vous devez faire quelque chose pour échapper aux parenthèses; ne peut pas rappelez-vous comment cela fonctionne en ce moment).

3
Arthur Reutenauer 14 déc. 2011 à 15:37

Oui, il sera. Une expression régulière peut correspondre n'importe où dans son entrée. # correspondra dans votre première expression régulière.

0
fge 14 déc. 2011 à 15:37