2012-06-08 10 views

risposta

24

Se si vuole testare una stringa con un'espressione regolare, utilizzare la biblioteca re

import re 
valid = re.match('^[\w-]+$', str) is not None 
5

Python ha regex così:

import re 
if re.match('^[\w-]+$', s): 
    ... 

Oppure si potrebbe creare una lista di permesso caratteri:

from string import ascii_letters 
if all(c in ascii_letters+'-' for c in s): 
    ... 
+0

re.match ('^ [\ w -] + $', s) restituisce un'istanza MatchObject corrispondente. Restituisce None se la stringa non corrisponde al pattern. Va confrontato con Nessuno. – Temak

+1

@Enor Perché? Qualsiasi oggetto match sarà true, None è l'unico valore di falsy possibile. –

1

Per testare se la stringa contiene solo alfanumerici e trattini, userei

import re 
found_s = re.findall('^[\w-]+$', s) 
valid = bool(found_s) and found_s[0] == s 
+0

oops non importa, quindi inutile – richard

1

senza importare qualsiasi modulo usando solo python puro, rimuovere nessuna alfa, numerico, eccetto trattini.

string = '#Remove-*crap?-from-this-STRING-123$%' 

filter_char = lambda char: char.isalnum() or char == '-' 
filter(filter_char, string) 

# This returns--> 'Remove-crap-from-this-STRING-123' 

O in una sola riga:

''.join([c for c in string if c.isalnum() or c in ['-']]) 
+0

Questa dovrebbe essere la risposta accettata, non è necessario regex o pacchetti esterni per risolvere questo problema. – Roganartu