Regex 如何删除字符串中的空白或生成一个正则表达式来接受所有类型的有效电子邮件

Regex 如何删除字符串中的空白或生成一个正则表达式来接受所有类型的有效电子邮件,regex,string,go,whitespace,Regex,String,Go,Whitespace,我有一个字符串,它由一个“”分隔,“像字符串:=”abc@bk.com, cde@bk.com“我想创建一个正则表达式,它将覆盖电子邮件前后的所有空格,或者是否有另一个函数字符串。Replace替换空格?他们都做同样的工作,但我不知道哪个更好。如果正则表达式更好,请给出一个示例,如果strings.Replace函数更好,请提供一个示例。我在上面尝试了一个小代码:- package main import ( "fmt" "regexp" "strings" ) type Use

我有一个字符串,它由一个“
”分隔,“
字符串:=”abc@bk.com, cde@bk.com“
我想创建一个正则表达式,它将覆盖电子邮件前后的所有空格,或者是否有另一个函数
字符串。Replace
替换空格?他们都做同样的工作,但我不知道哪个更好。如果正则表达式更好,请给出一个示例,如果
strings.Replace
函数更好,请提供一个示例。我在上面尝试了一个小代码:-

package main

import (
  "fmt"
  "regexp"
  "strings"
)

type User struct {
  Name []CustomerDetails `json:"name" bson:"name"`
}
type CustomerDetails struct {
  Value             string `json:"value" bson:"value"`
  Note              string `json:"note" bson:"note"`
  SendNotifications bool   `json:"send_notifications" bson:"send_notifications"`
}

func main() {
  var emailRegexp = regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$")
  var custName User
  emails := "abc@bk.com, cde@bk.com"
  splitEmails := strings.Split(emails, ",")
  fmt.Println(splitEmails)
  for _, email := range splitEmails {
    email = strings.Replace(email, " ", "", -1)
    if emailRegexp.MatchString(email) {
        custName.Name = append(custName.Name, CustomerDetails{
            Value: email,
        })
    }
  }
  fmt.Println(custName)
}
此示例基于函数
strings.Replace
。有人能帮我解决这个问题吗


感谢您宝贵的时间。

不要为此使用正则表达式。您当前的方法,即在空白处拆分,将与包含空白的有效电子邮件地址断开。虽然可以用正则表达式解析许多电子邮件地址,但必需的正则表达式是,即使它不能处理所有的情况

相反,要解析电子邮件地址列表,您应该使用标准库的函数。

您可以使用
.strip()
清除两侧的空白。

或者
re.split()
要使用模式
/,\s*/

进行拆分,您不能也不能尝试此操作:这将失败。使用regexp解析电子邮件地址非常复杂。照Flimzy的建议去做。链接答案中的表达式经常被引用,但是“正则表达式不处理电子邮件地址中的注释。RFC允许任意嵌套注释。单个正则表达式无法处理此问题。”。还有一个问题是,这是Perl语法,在RE2中未经修改就不能工作。所以,是的,一定要使用邮件包中的解析函数。@Peter:谢谢,我添加了一条评论,大意是提到的RE不完整。这个问题是关于Go的。