Вы можете использовать инвертированный символьный класс [^\s@]
, соответствующий символу без пробелов, кроме символа @. Затем подтвердите, что справа - это инвертированный класс символов 3 раза с последующим соответствием знаку @.
В качестве замены используйте *
[^\s@](?=[^@\s]*[^@\s]{3}@)
[^\s@]
Отрицательный класс символов, соответствует символу без пробелов, кроме @
(?=
Положительный просмотр вперед, утверждение, что справа - [^@\s]*
Сопоставление 0+ раз с символом без пробелов, кроме @
[^@\s]{3}
Трижды сопоставить символ без пробелов, кроме @
@
Сопоставить @
)
Закрыть lookahead
Regex demo
Если в адресе электронной почты может быть только один @, вы можете, например, использовать конечный квантификатор в положительном обзоре назад:
(?<=(?<!\S)[^\s@]{0,1000})[^\s@](?=[^@\s]*[^@\s]{3}@[^\s@]+\.[a-z]{2,}(?!\S))
Regex demo