La stringa che sto testando può essere abbinata a [\w-]+
. Posso verificare se una stringa è conforme a questo in Python, invece di avere un elenco di caratteri non consentiti e testarli?Come posso verificare se una stringa contiene solo caratteri alfanumerici e trattini?
risposta
Se si vuole testare una stringa con un'espressione regolare, utilizzare la biblioteca re
import re
valid = re.match('^[\w-]+$', str) is not None
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):
...
re.match ('^ [\ w -] + $', s) restituisce un'istanza MatchObject corrispondente. Restituisce None se la stringa non corrisponde al pattern. Va confrontato con Nessuno. – Temak
@Enor Perché? Qualsiasi oggetto match sarà true, None è l'unico valore di falsy possibile. –
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
oops non importa, quindi inutile – richard
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 ['-']])
Questa dovrebbe essere la risposta accettata, non è necessario regex o pacchetti esterni per risolvere questo problema. – Roganartu
Senza indicazione locale caratteri alfanumerici abbinano solo '[a-zA-Z0-9] +', 'non [\ w] +'. – greg