4 回答

TA貢獻(xiàn)1853條經(jīng)驗 獲得超6個贊
你可以使用 golang 的原始包是 regexp.Compile 或 regexp.MustCompile
r, _ := regexp.Compile(regexEmail)
newVariable := `a bunch of irrelevant text fjewiwofjfjvnvkdlslsosiejwoqlwpwpwo
mail=jim.halpert@gmail.com,ou=f,c=US
mail=apple.pie@gmail.com,ou=f,c=US
mail=hello.world@gmail.com,ou=f,c=US
mail=alex.alex@gmail.com,ou=f,c=US
mail=bob.jim@gmail.com,ou=people,ou=f,c=US
mail=arnold.schwarzenegger@gmail.com,ou=f,c=US`
fmt.Printf("%#v\n", r.FindStringSubmatch(newVariable))
fmt.Printf("%#v\n", r.SubexpNames())

TA貢獻(xiàn)1906條經(jīng)驗 獲得超10個贊
你可以使用這個包來做到這一點:
https://github.com/hamidteimouri/htutils/blob/main/htregex/htregex.go
// Emails finds all email strings
func Emails(text string) []string {
return match(text, EmailsRegex)
}

TA貢獻(xiàn)1836條經(jīng)驗 獲得超13個贊
為此,您需要將 long go string 分解為您需要的部分。您可以使用正則表達(dá)式進(jìn)行過濾和搜索,以匹配您在上面看到的電子郵件模式。
這是一段使用正則表達(dá)式的代碼,首先獲取該部分,"mail="然后進(jìn)一步格式化電子郵件,刪除尾隨,
import (
"fmt"
"regexp"
"strings"
)
func main() {
var re = regexp.MustCompile(`(?m)mail=[A-Za-z.@0-9]+\,`)
var str = `a bunch of irrelevant text fjewiwofjfjvnvkdlslsosiejwoqlwpwpwo
mail=jim.halpert@gmail.com,ou=f,c=US
mail=apple.pie@gmail.com,ou=f,c=US
mail=hello.world@gmail.com,ou=f,c=US
mail=alex.alex@gmail.com,ou=f,c=US
mail=bob.jim@gmail.com,ou=people,ou=f,c=US
mail=arnold.schwarzenegger@gmail.com,ou=f,c=US`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
email := strings.Split(match, "=")[1]
email = strings.ReplaceAll(email, ",", "")
fmt.Print(email)
}
}

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊
雖然我同意用戶 datenwolf 的評論,但這里是另一個不涉及正則表達(dá)式的版本。
它還處理更復(fù)雜的電子郵件格式,包括本地部分中的逗號。使用正則表達(dá)式不容易實現(xiàn)的東西。
請參閱https://stackoverflow.com/a/2049510/11892070
import (
"bufio"
"fmt"
"strings"
)
var str = `a bunch of irrelevant text fjewiwofjfjvnvkdlslsosiejwoqlwpwpwo
mail=jim.halpert@gmail.com,ou=f,c=US
mail=apple.pie@gmail.com,ou=f,c=US
mail=hello.world@gmail.com,ou=f,c=US
mail=alex.alex@gmail.com,ou=f,c=US
mail=bob.jim@gmail.com,ou=people,ou=f,c=US
mail=arnold.schwarzenegger@gmail.com,ou=f,c=US
mail=(comented)arnold.schwarzenegger@gmail.com,ou=f,c=US
mail="(with comma inside)arnold,schwarzenegger@gmail.com",ou=f,c=US
mail=nocommaatall@gmail.com`
func main() {
var emails []string
sc := bufio.NewScanner(strings.NewReader(str))
for sc.Scan() {
t := sc.Text()
if !strings.HasPrefix(t, "mail=") {
continue
}
t = t[5:]
// Lookup for the next comma after the @.
at := strings.Index(t, "@")
comma := strings.Index(t[at:], ",")
if comma < 0 {
email := strings.TrimSpace(t)
emails = append(emails, email)
continue
}
comma += at
email := strings.TrimSpace(t[:comma])
emails = append(emails, email)
}
for _, e := range emails {
fmt.Println(e)
}
}
- 4 回答
- 0 關(guān)注
- 245 瀏覽
添加回答
舉報