web-dev-qa-db-fra.com

Comment vérifier si une chaîne ne contient que des caractères alphanumériques et des tirets?

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?

22
q3d

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
32
math

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):
    ...
7
Lev Levitsky

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 ['-']])
5
Diego Suarez

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
1
richard