For this solution it would be much better and, above all, more legible, to build a script. However, just for fun, I give you two solutions:
Deleting all what is not an email. For that:
Match the text that is before the email
Match the email (and capture it)
Replace all of the above (1 and 2) with the value captured in 1.
Also add a ;
to separate the emails, otherwise it would not be different from one another.
Solution
=REGEXREPLACE(E2;"[^A-z0-9._%+-]*(?:[A-z0-9._%+-][^A-z0-9._%+-]*)*?([A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4})";"$1;")
Description
#TEXTO ANTES DEL EMAIL
[^A-z0-9._%+-]* # Consumir los caracteres que no pueden estar al principio del mail
(?: # REPETIR 0+, la menor cant. de veces
[A-z0-9._%+-] # Caracteres que pueden estar, pero no son el mail
[^A-z0-9._%+-]* # Caracteres que no pueden estar al principio del mail
)*? # FIN REPETIR
#EL EMAIL
([A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}) # Entre paréntesis lo captura en $1
And we replace it with "$1;"
. That is, the email and a semicolon to separate them.
Option 2: with REGEXEXTRACT and magic in the regular expression
What if we wanted to get 1 single email from those in the text? If we are interested in choosing the first, the second, one in particular?
Well, it can be done perfectly, but from now on I anticipate, it will not be easy to understand, and above all, a nightmare when it comes to maintaining it. So consider it a fun thing to see, but do not use it if at some point you may want to modify it.
We use a column to put what number of emails we want, and in the next one we get that email:
Solution
=RegexExtract(B2;"(?:[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}(?:[^A-z0-9._%+-][A-z0-9._%+-]*)*?[^A-z0-9._%+-]+){" & C2 - 1 & "}([A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4})")
Description
Using the same logic as before, the text is consumed between emails, but this time it is required to repeat N
times (the value of the cell) before coinciding with the mail. And we capture the last mail (which is the value returned by the function).
(?: # REPETIR
[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4} # Coincidir con email
(?:[^A-z0-9._%+-][A-z0-9._%+-]*)*? # Texto que no es
[^A-z0-9._%+-]+ # Tiene que separar 2 mails
){⋘n⋙} # FIN REPETIR n veces
# (⋘n⋙ se cambia por la celda)
([A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}) # Capturar email