Вы можете сопоставить любые добавочные номера, которые вы будете игнорировать sh, а затем сопоставить и зафиксировать шаблон TLD. Если значение группы 1 не пустое, возьмите совпадение, иначе отмените его:
package main
import (
"fmt"
"regexp"
)
func main() {
s := ` 175x100@3x.jpg and 175x100@3x.com`
rex := regexp.MustCompile(`\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.(?:jpe?g|([A-Za-z]{2,6}))\b`)
results := rex.FindAllStringSubmatch(s, -1)
for _, match := range results {
if len(match[1]) > 0 {
fmt.Printf("%q\n", match[0])
}
}
}
См. Демонстрационную версию Go онлайн . Вывод: 175x100@3x.com
.
Здесь шаблон (?:jpe?g|([A-Za-z]{2,6}))
соответствует jpg
или jpeg
и соответствует, а захватывает в группу 1 из любых двух-шести букв ASCII. if len(match[1]) > 0 { fmt.Printf("%q\n", match[0]) }
part печатает совпадение, только если сопоставлена группа 1.