No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Reto: Filtrando letras en números telefónicos utilizando negaciones

11/29
Recursos

En el texto siguiente:
555658
56-58-11
56.58.11
56.78-98
65 09 87
76y87r98

Definir un patrón que haga match a todas las líneas excepto a la la última, la que tiene letras.

Es decir, seleccionar todas sin importar el caracter de separación, excepto cuando los números están separados entre sí por letras.

Aportes 541

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

(\d{2}\W?){3}

Jugando con la negación encontré que se puede hacer una doble negación que da evidentemente positivo, lo que significa que

[^\D]

Es lo mismo que…

\d

Selcciona cada linea cuando se separen por un signo y no por una letra
\d+[^aA-zZ\n]{2,6}

\d+ Todos los digitos.
[^aA-zZ\n] Siguiente caracter No puede ser letra ni salto de linea
{2,6} Selecicon aplica en secciones de de minimo 2 digitos maximo 6

Mi solución me salió así:

\d{2,}[^a-z]+

Esta es mi respuesta

(\d{2,2}[^a-zA-Z\n]?){3,3}

Me funciona porque tambien me ignora el enter entre lineas.

Mi solución:

.+[^y,r]\d\d

Me gusta verlo así para utilizar los contadores y la negación que vimos previamente.

([\d]{2,2}[^\w]?){3,3}

https://regex101.com/r/9iVJA5/6/ esta pagina esta buena 😄

Mi solución:
(.*[\W])

Expresión Regular: (\d\d[^a-z\n]?){3,3}
Me parece que lo de los paréntesis no lo había comentado Beto en lo que vamos del curso, pero mi intención era agrupar así que lo probé con llaves, con corchetes y por último por paréntesis y estos últimos fueron los que funcionaron.

Mi solución:
.+\d[^.\w]

Listo

[0-9]*[^\w][\.\s\-]?

La respuesta al reto es: \d\d\W?\d\d\W?\d\d[\n]

Otra posible solución al reto

(\d{2}[^a-z]?){3}

Mi solución (\d{2,2}[^a-zA-Z]?){3,3}

La respuesta al reto es: (\d\d[^a-zA-Z]?){2}\d\d

mi solución , usando la \W para negar y diciendo que puede o no tener para que pueda hacer match con la primera linea

(\d{2,2}\W?){3,3}

(\d{2}\W?)\d.* sin importar el múltiplo del ultimo dígito 😃

\d{2}\W?\d{2}\W?\d{2}\n

Solución al reto

[0-9\ \.\-][^a-z]

\d\d+[\W]

Mi expresion regular quedó asi

(\d{2}\W?){3,3}
(\d{2,2}\W?){3}

\d{2}([\.\-\s]?\d{2}){2}

Yo lo genere de esta manera , debido a que el ejercicio esta planteado para realizar uno o varios match y no indica que sea por una cantidad de digitos lo genere de esta manera , aunque muy probablemente existe una manera de realizar un match de todo el conjunto de los numeros

\d{2,}[\-\.\s]\w*?

\d{2}[^a-zA-Z]+

Mi solucion
(\d{2}[^a-zA-Z]?){3}

El patrón REGEX para seleccionar todas las líneas excepto la última que contiene letras sería:

^(\d+([\s.-])?)+$

Este patrón busca una o más secuencias de dígitos (\d+), seguidas opcionalmente de un separador que puede ser un espacio, un punto o un guión (- o .), todo esto encerrado en paréntesis. La secuencia completa se repite una o más veces ((…)+), y todo el patrón debe comenzar y terminar con una secuencia de dígitos, indicado por el ancla “^” y “$”. De esta manera, las líneas que contienen solo números con separadores válidos serán seleccionadas, mientras que la última línea que contiene letras no lo será.

Hello!
Creo que esta me da la respuesta al challenge:

[0-9]{2,2}[\W]?

Mi solución es la siguiente:

\d{2,}\W+

Esta seria la solucion al reto en Visual studio code:
\d.+\d{2}?.+

(\d\d)\W?(\d\d)\W?(\d\d)

El reto: (\d{2,2}[\.\- ]?){5}

y el anti reto 😄 (también incluyendo la de las letras): (\d{2,2}[.-a-z ]?){5}

\d{2,2}[^\w]?\d{2,2}[^\w]?\d{2,2}

Utilizando:

[A-z]

Sirve para referirse tanto a letras mayúsculas como a minúsculas.
Evitando así usar [a-zA-Z]

Esta es mi solución:

\d{2}[^A-z]+

Incluso excluyendo a las mayúsculas utilizando A-z, ya que me di cuenta que así también sirve para referirse tanto a mayúsculas como a minúsculas

Este es mi solución para este caso en específico
([^a-zA-Z \s]+\d{2,2}[-.\ ]?){3}

SPOILER 😄

(\d{2}[\W\n]){3}

El \W es equivalente a [^a-zA-Z0-9_], luego hay que añadir el \n para que coja el último par de dígitos.

\d\d[.\s-]?\d\d[.\s-]?\d\d Esta fue mi solución. Funcionó aunque no fue muy prolija. Después vi los comentarios y encontré soluciones mucho más elegantes de otros/as compañeros/as .

\d{2}\W?\d{2}\W?\d{2}

Esta es mi solución :
\d{2,}[.?|^\W]

^(\d{2,2}\W?){3,3}$

\d[-. ]?

Esta es mi soluciòn:

\d{2}[\.\W]{0,1}\d{2}[\.\W]{0,1}\d{2}[\.\W]{0,1}

Esta seria mi respuesta al reto:

\d{2}[\W]?\d{2}[\W]?\d{2}\n
\d{2}[^a-z]?\d{2}[^a-z]?\d{2}

Mi solucion:

([\d]{2}[^\w]?){3}

(\d{2,4}[^a-zA-Z]){3,5}

Mi solución: (\d{2,2}[.- ]?){3,3}

La hice de esta manera:
(\d+[^a-z]){3,}

me demoré pero valió el esfuerzo

\d+\W

(\d{2}[^\w\n]?){3}

Esta me funciono bien

Esta fue la solución que encontré al reto, un poco sencilla pero eficaz

\d\d\W?

\d{2}\W?\d{2}\W?\d{2}

\d+?[\-\.\n ]+

\d\d[^a-z]?\d\d[^a-z]?\d\d

(\d{2,2}\W?){3,3}

(\d{2}[^aA-zZ0-9]?){2}\d{2}
✔️

Lo primero que se me ocurrió fue

\d\d[ \.-]?\d\d[ \.-]?\d\d

Luego lo pensé un poco mas y me dio

\d{2}\W?\d{2}\W?\d{2}\W?

Y revisando comentarios me di cuenta que podía ponerle brackets a la expresión \d{2}\W? si estaba entre paréntesis

(\d{2}\W?){3}

Mi solución es ^(\d{2}[-\. ]?){2}d{2}$


También les comparto una captura del funcionamiento. Utilizo la plataforma Regex101 para hacer mis pruebas.

^[5-6]{1,}[-.\s]?[0-9]{1,}[-.\s]?[0-9]{1,}

^\d[^yr]{5,7}

que empiese por un digito que no tenga ni “y,r” y de 5 a 7

mi respuesta
.+[^y,r]\d{2}

(\d{2,2}[^\w]?){3,3} 

me funcionó de esta manera,

sólo niego que después de un grupo de dos dígitos exista una letra que pueda o no pueda existir y finalmente le digo que los cuente cada 3 matchs

Mi solución:
\d{2}[^aA-zZ]+\D?

Si queremos seleccionar todos los digitos excepto “y” y “r” (no es parte del reto) solo quitamos \D:
\d{2}[^a-zA-Z]?

Mi solución: \d{2,2}\W?\d{2,2}\W?\d{2,2}

Mi solución al problema 😃

[0-9]{2}[^a-z]

\d\d[^\da-z]\d\d[^\da-z]\d\d[^\da-z]\d\d[^\da-z]\d\d

MI resuesta al reto

(\d{2,2}[^\w]?){3,3}
\d{2,2} - dos digitos
[^\w] ?- todo lo que no es una palabra que quede o no estar
(…?){3,3} ->asi decimos q se repite 3 veces y es un match total

Reto cumplido, aqui mando mi respuesta:
![](

"(\\d{2}[^a-zA-Z\n])+\\d{2}|\\d+"
(\d{2}[^a-zA-Z])+\d{2}|\d+

Las que me funcionaron

\d\d[\-\. ]?\d\d[\-\. ]?\d\d
Does the same as above
(\d\d[\-\. ]?){2,2}\d\d

#

\d\d([^a-z])?\d\d([^a-z])?\d\d
Does the same as above
(\d\d([^a-z])?){2,2}\d\d

\d\d\W?\d\d\W?\d\d

De entrada, lo pensé así:
\d\d\W?\d\d\W?\d\d
Ahora reviso los aportes de los compañeros.

(\d{2,2}[^\w]?){3,3}
/([\d]{2,2}[^\w]?){2,3}/gm

Python

Con el siguiente codigo, pueden detectar no solo los ejercicios de esta clase, sino incluso los de anteriores clases, ya que recuerdo que Alberto borro unos numeros en un ejercicio ya que contenian mayor cantidad de caracteres agrupados y podian generar problemas. Esta es la adaptacion de un codigo que coloco mas abajo otra persona.

import re

fh = open(r"C:\Users\Alfonso Zapata\jupyter\Cursos\Junio 2022\Curso de expresiones regulares - platzi\REGEX-master\liners.txt", "r").read()

fh

line = re.findall('\d*[^aA-zZ\n]{8,14}', fh) 
print(line)

Hola, esta es mi respuesta.

\d+[^a-zA-Z\n]{2,6}

He estado buscando solución porque aún así deja que entren otros números en cadenas mayores a 2 y máximo 6 que no son números de teléfono.

Mi solución al reto:

(\d{2}[-.\s]?){3}

mi solucion con un or

([\d]{2}[-.\s][\d]{2}[-.\s][\d]{2}|[\d]{6})

Nada mas gratificante; cuando el aprendizaje se lleva a la practica:

\d+[0-9]\W

RTA = \d{2,2}[^a-zA-Z]+

^[0-9]{2}[^a-z].*$

Un poco larga, pero es útil :

\d\d[^a-z]\d\d[^a-z]\d?\d?

[0-9]{2,2}[^a-z]?[0-9]{2,2}[^a-z]?[0-9]{2,2}

Mis posibles soluciones

\d\d\W?\d\d\W?\d\d
[0-9]{2,6}[ \d.,-]+

Mi solución:

\d\d[-?.? ?]\d\d[-?.? ?]\d\d

mi respuesta:
\d\d[^a-z]?\d\d[^a-z]?\d\d

Buenas noches adjunto solución:

(\d{2,2}[\W]?){3,3}

(\d{2,2}[^\w]?){3,3}

(\d{2,2}[\W]*){1,2}(\d{2,2}[\W]*)

(\d{2,2}\W?){3}

la mejor solución segun lo enseñado hasta el momento según yo xD

explicit…
\d{2}[-. ]{0,1}[a-zA-Z]{0,0}\d{2}[-. ]{0,1}[a-zA-Z]{0,0}\d{2}[-. ]{0,1}[a-zA-Z]{0,0}

[^a-zA-Z]{6,8}\n

Quise hacerlo lo más simple posible.

<[^\D]*> 

Mi solución:

([\d]{2}?[^\w]?){3}

Puede ser así?

\d\d\D?\W\d\d\D?\W\d\d

Algo así podría ser

\d{0,}[\-., ][\w]\d+