En primer lugar, no necesito la validación completa de la dirección de correo electrónico , mi tarea dada no lo requiere. Solo quiero actualizar mi código regex actual para que no coincida con las direcciones que terminan en un punto.

Mi código actual: [0-9A-Za-z.]+[@][0-9A-Za-z.]+

Atrapa a ambos "user@exampe.com", "user@example.com".

Me gustaría capturar solo de la cadena que termina sin el punto . user@exampe.com

Cadena de ejemplo:

dasd.fas@fsaf.dfas.dsa, zghs@gas.gsq, adg32.dsa12@cas, ksak@c.csa. , gs32.basaa@scaa.upc.

Me gustaría atrapar las cadenas marcadas como código en el ejemplo.

Editar: solo tengo una línea con varias direcciones de correo electrónico separadas con un , y un space después de ellos.

1
sasieightynine 9 sep. 2018 a las 06:59

4 respuestas

La mejor respuesta

Puede agregar [0-9A-Za-z] después de su expresión regular para terminar con lo que desea hacer coincidir en su clase de personaje sin el punto seguido de una búsqueda positiva (?=, |$) que afirma que lo que sigue es una coma seguida de un espacio en blanco o el Fin de la cuerda.

[0-9A-Za-z.]+@[0-9A-Za-z.]+[0-9A-Za-z](?=, |$)

Demostración de Regex

3
The fourth bird 9 sep. 2018 a las 07:37

([0-9A-z.]+@(?:\.?[0-9A-z]+)+)(?=,|$)

Pruébalo aquí

2
Adam 9 sep. 2018 a las 08:19

Prueba éste:

Simplemente captura ,, $ y agrúpalos en un grupo sin captura excepto el final .

[0-9A-Za-z.]+[@][0-9A-Za-z.]+[0-9A-Za-z](?:(,|$))

demostración aquí

0
The Scientific Method 9 sep. 2018 a las 17:05

Simplemente modifique ligeramente su patrón: [0-9A-Za-z.]+[@](?:[a-zA-Z]|\.(?=[a-zA-Z]))+.

Utiliza alternancia después de @ para que coincida con una o más: letras O punto, si es seguido por otra letra, gracias a la anticipación positiva: \.(?=[a-zA-Z]).

Demo

0
Michał Turczyn 9 sep. 2018 a las 09:20