2012-06-08 10 views

Respuesta

24

Si desea probar una cadena con una expresión regular, utilizar la biblioteca re

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

Python tiene expresiones regulares así:

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

O puede crear una lista de permitió caracteres:

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

re.match ('^ [\ w -] + $', s) devuelve una instancia de MatchObject correspondiente. Devuelve None si la cadena no coincide con el patrón. Debe ser comparado con None. – Temak

+1

@Enor ¿Por qué? Cualquier objeto de coincidencia será verdadero, Ninguno es el único valor de falsy posible. –

1

Para probar si la cadena contiene solamente alfanuméricos y guiones, me gustaría utilizar

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

Vaya, no importa, tan innecesario – richard

1

Sin importar cualquier módulo simplemente usando Python puro, eliminar cualquier ninguno alfa, numérico, excepto guiones.

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 en una sola línea:

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

Esta debería ser la respuesta aceptada, no necesita paquetes regex o externos para resolver esto. – Roganartu

Cuestiones relacionadas