2009-11-04 6 views
8

En utilisant le module Python re, comment obtenir l'équivalent du "\ w" (qui correspond aux caractères alphanumériques) SANS correspondre aux caractères numériques (ceux qui peuvent être appariés par "[0-9]")?Comment faire correspondre des caractères alphabétiques sans caractères numériques avec Python regexp?

Notez que le besoin fondamental est de faire correspondre n'importe quel caractère (y compris toutes les variations Unicode) sans caractères numériques (qui correspondent à "[0-9]").

En guise de note finale, j'ai vraiment besoin d'une expression rationnelle car elle fait partie d'une plus grande expression rationnelle.

Les traits obliques ne doivent pas être appariés.

EDIT:

  • Je ne l'avais pas pensé à l'état souligne, donc merci pour les avertissements au sujet de cette contribution égale au « \ w » et pour la solution élu qui répond à cette question.

Répondre

24

Vous voulez [^\W\d]: le groupe de caractères ce n'est pas (un chiffre ou pas un alphanumérique). Ajouter un trait de soulignement dans cet ensemble nié si vous ne les voulez pas non plus.

Un peu tordu, si vous me demandez, mais cela fonctionne. Devrait être plus rapide que l'alternative lookahead.

+0

Nice, +1 de moi. N'a pas pensé à celui-là. – Tomalak

+0

bonne idée, qui peut être réutilisé avec d'autres modèles et d'autres implémentation regex. – vaab

5
(?!\d)\w 

Une position qui ne soit pas suivi d'un chiffre, puis \w. Annule effectivement les chiffres mais autorise la plage \w en utilisant un aperçu négatif.

La même chose pourrait être exprimée comme un signe positif d'anticipation et \D:

(?=\D)\w 

Pour correspondre à plusieurs d'entre eux, joindre à parens:

(?:(?!\d)\w)+ 
+3

N'oubliez pas que \ w contient également le trait de soulignement. –

+0

L'OP n'a rien dit à propos du trait de soulignement. Comment est-ce pertinent? – Tomalak

+1

Juste au cas où l'OP ne s'y attendrait pas. J'aime ta solution. –

Questions connexes