sirve - python para impacientes expresiones regulares
Python: ¿Expresión regular para que coincida con alfanumérico no funciona? (3)
Busco hacer coincidir una cadena que se ingresa desde un sitio web para verificar si es alfanumérico y posiblemente contiene un guión bajo. Mi código:
if re.match(''[a-zA-Z0-9_]'',playerName):
# do stuff
Por alguna razón, esto coincide con caracteres locos, por ejemplo: nIg ○ ▲ ☆ ★ ◇ ◆
Solo quiero AZ regular y 0-9 y _ coincidencia, ¿hay algo que me esté perdiendo aquí?
… Verifique si es alfanumérico y posiblemente contenga un guión bajo.
¿Quiere decir esto literalmente, de modo que solo se permite un guión bajo, total? (No es irrazonable para los nombres de los jugadores; en particular, los guiones bajos adyacentes pueden ser difíciles de leer para otros jugadores). ¿No debe coincidir "a_b_c"?
Si es así:
if playerName and re.match("^[a-zA-Z0-9]*_?[a-zA-Z0-9]*$", playerName):
La nueva primera parte de la condición busca un valor vacío, lo que simplifica la expresión regular.
Esto no impone restricciones sobre dónde puede aparecer el guión bajo, por lo que todos "_a", "a_" y "_" coincidirán. Si, por el contrario, desea evitar los guiones bajos iniciales y finales, lo que de nuevo es razonable para los nombres de los jugadores, cambie a:
if re.match("^[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)?$", playerName):
// this regex doesn''t match an empty string, so that check is unneeded
Python tiene una secuencia especial /w
para coincidir con caracteres alfanuméricos y de subrayado cuando no se especifican los indicadores LOCALE
y UNICODE
. Para que puedas modificar tu patrón como,
pattern = ''^/w+$''
Tu expresión regular solo coincide con un personaje. Intenta esto en su lugar:
if re.match(''^[a-zA-Z0-9_]+$'',playerName):