2009-11-04 22 views
8

Usando el módulo de Python re, ¿cómo obtener el equivalente de "\ w" (que coincide con los caracteres alfanuméricos) SIN hacer coincidir los caracteres numéricos (aquellos que pueden coincidir con "[0-9]")?¿Cómo hacer coincidir caracteres alfabéticos sin caracteres numéricos con expresiones regulares de Python?

Observe que la necesidad básica es hacer coincidir cualquier carácter (incluidas todas las variaciones de unicode) sin caracteres numéricos (que se corresponden con "[0-9]").

Como nota final, realmente necesito una expresión regular ya que es parte de una expresión regular mayor.

Los subrayados no coinciden.

EDIT:

  • yo no había pensado subraya estado, así que gracias por las advertencias sobre este ser igualados por "w \" y para la solución elegida que soluciona este problema.

Respuesta

24

¿Quieres [^\W\d]: el grupo de caracteres eso no es (ni un dígito ni un alfanumérico). Agregue un guión bajo en ese conjunto negado si no los quiere tampoco.

Un poco retorcido, si me preguntas, pero funciona. Debería ser más rápido que la alternativa de mirar hacia adelante.

+0

Agradable, +1 de mí. No pensé en eso. – Tomalak

+0

idea genial, que se puede reutilizar con otros patrones y otra implementación de expresiones regulares. – vaab

5
(?!\d)\w 

una posición que no es seguido por un dígito, y luego \w. Cancela efectivamente los dígitos, pero permite el rango \w al usar una mirada negativa hacia adelante.

Lo mismo se puede expresar como un aspecto de la ventaja positiva y \D:

(?=\D)\w 

sustituye a varios de ellos, incluya en parens:

(?:(?!\d)\w)+ 
+3

No olvide que \ w también contiene el guión bajo. –

+0

El OP no dijo nada sobre el guión bajo. ¿Cómo es eso relevante? – Tomalak

+1

Por si el OP no lo espera. Me gusta tu solución –

Cuestiones relacionadas