2009-10-29 8 views

Répondre

2

Vous voulez

if re.search('[A-Za-z0-9]+', i): 
    print i 
+3

Notes: quantificateur est pas nécessaire, il correspondra exactement-un sans. Suppose un alphabet standard de 26 lettres. –

+0

Oui, le '+ 'n'est pas nécessaire. – hasen

+0

Suppression du +. C'est une habitude, car une expression comme celle-là devient invariablement plus complexe dans mon propre code, et je veux habituellement le + s'il y a autre chose. –

1

[A-Z]?[a-z]?[0-9]? correspond à une lettre majuscule en option, suivi d'une lettre minuscule en option, suivi d'un chiffre en option. Donc, il correspond également à une chaîne vide. Ce que vous cherchez est: [a-zA-Z0-9] qui correspond à un seul chiffre, lettre minuscule ou majuscule.

Et si vous avez besoin de vérifier la lettre (et les chiffres) en dehors de la plage ASCII, utilisez ceci si votre saveur regex le supporte: [\p{L}\p{N}]. Où \p{L} correspond à n'importe quelle lettre et \p{N} n'importe quel nombre.

4

re — Regular expression operations

Cette question est en fait assez délicate. Malheureusement, les solutions \ w includes _ et [a-z] supposent un alphabet de 26 lettres. Avec la solution ci-dessous s'il vous plaît lire le pydoc où il parle de LOCALE et UNICODE.

"[^_\\W]" 

Notez que puisque vous testez uniquement pour l'existence, pas quantificateurs doivent être utilisés - et en fait, en utilisant les quantificateurs qui peuvent correspondre à 0 fois sera retourne faux positifs.

+2

Pour se débarrasser du double \\, vous pouvez utiliser une chaîne brute: r '[^ _ \ W]' –

+6

Il me vient juste que '[_ _ \\]' ressemble à un pirate – hasen

+0

Cela correspondrait aussi chaîne composée uniquement de signes de ponctuation. –

0

n'ont pas besoin d'être regex.

>>> a="abc123" 
>>> if True in map(str.isdigit,list(a)): 
... print a 
... 
abc123 
>>> if True in map(str.isalpha,list(a)): 
... print a 
... 
abc123 
>>> a="##@%$#%#^!" 
>>> if True in map(str.isdigit,list(a)): 
... print a 
... 
>>> if True in map(str.isalpha,list(a)): 
... print a 
... 
2

Je vous suggère de vérifier RegexBuddy. Il peut bien expliquer les regex. RegexBuddy

RegexBuddy

RegexBuddy

Questions connexes