2009-10-16 17 views
11

En Python. r^[\ w *] $En expresiones regulares, ¿qué significa w *?

¿qué significa eso?

+1

¿Quieres decir 'r "^ \ w * $"' ? –

+0

Siguiendo los comentarios de Laurence, esto realmente no tiene ningún significado especial sin las comillas. – foosion

+0

Hola @ S.Lott: ¿Cómo sabes que esto es tarea? –

Respuesta

36

respuesta rápida: coincidir con una cadena que consta de un solo carácter, en que el carácter es alfanumérico (letras, números) un guión bajo (_) o un asterisco (*).

Detalles:

  • El "\w" significa "cualquier carácter de palabra", que por lo general significa alfanuméricos (letras, números, independientemente del caso), además de subrayado (_)
  • El "^" " ancla "al principio de una cadena y" $ "" ancla "Al final de una cadena, lo que significa que, en este caso, la coincidencia debe comenzar al principio de una cadena y finalizar al final de la cadena .
  • [] significa una clase de caracteres, lo que significa "coincidir con cualquier carácter contenido en la clase de caracteres".

También vale la pena mencionar que la normalidad citando y escapar de las reglas para las cadenas hacen que sea muy difícil entrar en expresiones regulares (tendrían que ser escapado con barras invertidas adicionales todas las barras invertidas), por lo que en Python no es una notación especial que tiene sus propias reglas de cotización especiales que permiten que todas las barras invertidas se interpreten correctamente, y para eso sirve el "r" al principio.

Nota: Normalmente un asterisco (*) significa "0 o más de lo anterior", pero en el ejemplo anterior, se hace no tienen ese significado, ya que el asterisco es dentro de la clase de caracteres , por lo que pierde su "especialidad".

Para obtener más información sobre expresiones regulares en Python, las dos referencias oficiales son re module, Expresión regular HOWTO.

+0

Esto es necroposting, pero por el bien de los lectores futuros, \ w es el equivalente de Python de la clase: [^ a-zA-Z0-9_]. Como puede ver aquí, al menos para Python 2.7.x a 3.4.y, '*' no entra en eso. Si lo hiciera, la clase de expresión regular [\ w *] introduciría una repetición inútil de * como carácter literal (es decir, sin significado especial porque está incluido dentro de los corchetes que denotan una clase). – Cbhihe

+0

En Python 3, la definición de '\ w' tiene en cuenta las definiciones de caracteres Unicode de forma predeterminada, por lo que es mucho más amplio que simplemente' [^ a-zA-Z0-9_] '; ver https://docs.python.org/3/library/re.html#module-re para los detalles sangrientos. – Bevan

0

\ w hace referencia a 0 o más caracteres alfanuméricos y el guión bajo. el * en su caso es también dentro de la clase de caracteres, por lo que [\ w *] se correspondería con todos [a-zA-Z0-9_ *] (el * se interpreta literalmente)

Ver http://www.regular-expressions.info/reference.html

Para Cita:

\ d, \ w y \ s --- Clases de caracteres abreviados que coinciden con los dígitos, los caracteres de las palabras y los espacios en blanco. Se puede usar dentro y fuera de las clases de caracteres.

Editar corrige en respuesta al comentario

+0

No en la expresión regular anterior. Dado que '' 'está dentro de la clase de caracteres, se convierte en miembro de la clase. –

0

\ w es equivalente a [a-zA-Z0-9_] No entiendo el * o después de que el [] alrededor de él, porque \ w ya es una clase y * en las definiciones de clase no tiene sentido.

1

Como dijo exhuma, \ w es cualquier carácter de clase de palabra (alfanumérico como lo aclara Jonathan).

Sin embargo, ya que está entre corchetes que coincidirá:

  1. un solo carácter alfanumérico o
  2. un asterisco (*)

Así que toda la expresión regular coincide:

  • el comienzo de una línea (^)
  • seguido de un carácter alfanumérico único o un asterisco
  • seguido por el final de una línea ($)

por lo que el siguiente coincidirían:

blah 
z <- matches this line 
blah 

o

blah 
* <- matches this line 
blah 
0

Como dijimos arriba \ w significa cualquier palabra. por lo que podría utilizar esto en el contexto de continuación

view.aspx?url=[\w] 

cual significa que puede tener cualquier palabra como el valor de la "url =" parámetro

+0

\ w solo coincide con un solo carácter, no con una palabra completa. Necesitaría un cuantificador como +, * o {n, m} para hacer coincidir una palabra completa (es decir, más de un carácter) –

Cuestiones relacionadas