Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/04/2011, 19:25
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Duda python Expresiones Regulares

Cita:
Iniciado por javie_85 Ver Mensaje
Hola a todos!
Holaaaaaaa javie_85!!

Cita:
Iniciado por javie_85 Ver Mensaje
1- Si para el primer caso estoy diciendo que me muestre todas las palabras que van seguidas de espacio porque no muestra 95?.
De hecho estas pidiendo un limite de palabra seguido (\b) seguido de zero o mas caracteres de palabra (\w*) seguido de un espacio en blanco (\s) seguido de un limitador de palabra (\b).

Cita:
Iniciado por javie_85 Ver Mensaje
2. Si el el segundo caso estoy diciendo que muestre todas las palabras, y las muestra, porque me crea espacios en la lista que devuelve, es decir porque no devuelve todas las palabras seguidas?.
¿Como que por que te devuelve eso? Si eso es lo que le pediste al motor regex.

Cita:
Iniciado por javie_85 Ver Mensaje
3. Podrias explicarme exactamente para que se usa y el uso correcto de \b ?, porque me da que aunque lo use no lo debo tener muy claro...
Claro que si este es tu principal problema. Ver explicación.

En pocas palabras los limitadores de palabras (\b) actúan de la siguiente manera.
Código:
\b no captura ningún carácter
1.- Antes del primer carácter de la cadena, si el primer carácter de la cadena es un carácter de palabra.
2.- Después del ultimo carácter de la cadena, si el ultimo carácter es un carácter de palabra.
3.- Entre 2 caracteres de la cadena, donde uno es un carácter tipo palabra y el otro no.
Para ponerlo simple captura "solamente las palabras enteras"
Tus ejemplos actúan como deben. Pero lo que pones en tu expresión regular no es lo que quieres. Explicación:
Código:
#Paso 1
#Coincide \b por que es el inicio de la cadena y el primer caracter es un caracter de palabra
#"hace una humedad del 95 %"
#^ Aqui coincide \b

#Paso 2
#"hace una humedad del 95 %"
#     ^Coincide \w*\s hasta aqui

#Paso 3
#"hace una humedad del 95 %"
#      ^Coincide \b por que el siguiente caracter es un caracter de palabra y el anterior no

#Paso 4
#"hace " es un grupo

#Paso 5
#"hace una humedad del 95 %"
#      ^Inicio de la cadena, aqui coincide \b

#Paso 6
#"hace una humedad del 95 %"
#         ^Coincide \w*\s

#Paso 7
#"hace una humedad del 95 %"
#          ^Coincide \b por que el sig caracter es un caracter de palabra y el anterior no

#Paso 8
#"una " se hace grupo

#....

#Paso N
#"hace una humedad del 95 %"
#                      ^Concide \b

#Paso N+1
#"hace una humedad del 95 %"
#                        ^Concide \w*\s

#Paso N+1
#"hace una humedad del 95 %"
#                         ^NO Concide \b el anterior caracter es un espacio, pero el sig. no es un caracter de palabra
Para tu siguiente ejemplo hace exactamente lo mismo pero sin el espacio.


Ejemplo de uso:
Código:
\b\w\b
Para terminar y en mi humilde opinión no deberías de usar regex para cosas tan simples como estas. Con esto bastaría usar el método split() para separar todo en "palabras".

Recuerda:
Cita:
Iniciado por Jamie Zawinski
Algunas personas cuando se enfrentan a un problema piensan “Ya sé, ¡usaré expresiones regulares!”

Ahora tienen dos problemas.