La chaîne que je teste peut correspondre à [\w-]+
. Puis-je tester si une chaîne est conforme à cela en Python, au lieu d'avoir une liste des caractères non autorisés et de tester cela?
Si vous souhaitez tester une chaîne par rapport à une expression régulière, utilisez la bibliothèque re
import re
valid = re.match('^[\w-]+$', str) is not None
Python a également des expressions régulières:
import re
if re.match('^[\w-]+$', s):
...
Ou vous pouvez créer une liste de autorisé caractères:
from string import ascii_letters
if all(c in ascii_letters+'-' for c in s):
...
Sans importer aucun module en utilisant uniquement du python pur, supprimez tout aucun alpha, numérique sauf les tirets.
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'
Ou en une seule ligne:
''.join([c for c in string if c.isalnum() or c in ['-']])
Pour tester si la chaîne contient niquement alphanumérique et tirets, j'utiliserais
import re
found_s = re.findall('^[\w-]+$', s)
valid = bool(found_s) and found_s[0] == s