
Expresion regular y grep para encontrar los correos
Publicado por Fer (21 intervenciones) el 24/10/2013 06:42:08
Hola, buenas.
Necesito extraer emails de una lista los cuales ademas deben estar escritos correctamente (sintax correcto).
He escrito un programita en VBA para access que usa esta expresion regular:
"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$"
y funciona muy bien en esa plataforma, pero es extremadamente lento.
Probando con linux hago esto en la consola:
sky@Demoledor:~/exemails/pruebasexp$ egrep -oi "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$" file.txt
egrep -oi "[a-z0-9"[a-z0-9%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9'*+/=?^_`{|}~-]+(?:\.[a-z0-9%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$" file.txt
-bash: error sintáctico cerca del elemento inesperado `)'
Me he fijado que elimina los "#" en la repeticion que saca, asi que los elimino de la expresion y ejecuto de nuevo:
egrep -oi "[a-z0-9!$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$" file.txt
egrep -oi "[a-z0-9+(?:[A-Z]{2,6})$" file.txt%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9+(?:[A-Z]{2,6})$" file.txt%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$" file.txt
>
y me saca el ">".
Me sabria decir alguien porque no acepta los "#" y como se pueden incluir en la expresion regular si que de el error de arriba?.
Mas importante aun :-), que tendria que modificar para que la expresion sea aceptada y no me invite a meter datos (creo que es lo que hace el ">")
Repito que la expresion funciona perfectamente en VBA.
Expresiones mas sencillas, como esta que he encontrado por ahi:
egrep -io "([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})" file.txt
funcionan perfectamente en la shell
Ya he leido que hay diferencia entre las expresiones regulares que se usan en los diferentes lenguaje, pero no he podido encontrar ningun documento que describa dichas diferencias.
Desde ya muchas gracias a toda la gente del foro, no es la primera vez que caigo por aqui y ciertamente es un lujo contar con la informacion y apollo brindado.
Saludos.
Necesito extraer emails de una lista los cuales ademas deben estar escritos correctamente (sintax correcto).
He escrito un programita en VBA para access que usa esta expresion regular:
"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$"
y funciona muy bien en esa plataforma, pero es extremadamente lento.
Probando con linux hago esto en la consola:
sky@Demoledor:~/exemails/pruebasexp$ egrep -oi "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$" file.txt
egrep -oi "[a-z0-9"[a-z0-9%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9'*+/=?^_`{|}~-]+(?:\.[a-z0-9%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$" file.txt
-bash: error sintáctico cerca del elemento inesperado `)'
Me he fijado que elimina los "#" en la repeticion que saca, asi que los elimino de la expresion y ejecuto de nuevo:
egrep -oi "[a-z0-9!$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$" file.txt
egrep -oi "[a-z0-9+(?:[A-Z]{2,6})$" file.txt%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9+(?:[A-Z]{2,6})$" file.txt%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2,6})$" file.txt
>
y me saca el ">".
Me sabria decir alguien porque no acepta los "#" y como se pueden incluir en la expresion regular si que de el error de arriba?.
Mas importante aun :-), que tendria que modificar para que la expresion sea aceptada y no me invite a meter datos (creo que es lo que hace el ">")
Repito que la expresion funciona perfectamente en VBA.
Expresiones mas sencillas, como esta que he encontrado por ahi:
egrep -io "([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})" file.txt
funcionan perfectamente en la shell
Ya he leido que hay diferencia entre las expresiones regulares que se usan en los diferentes lenguaje, pero no he podido encontrar ningun documento que describa dichas diferencias.
Desde ya muchas gracias a toda la gente del foro, no es la primera vez que caigo por aqui y ciertamente es un lujo contar con la informacion y apollo brindado.
Saludos.
Valora esta pregunta


0