正则表达式,多个电子邮件地址之间用半角冒号分隔

时间:2019-05-31 16:23:24

标签: c# regex

我正在尝试构建一个正则表达式,以允许多个电子邮件仅用一个域来用分号分隔。

这就是我现在拥有的:

@"^(?>\b[\w+-.%]+@gmail\.com(?:[,;]\s*)?)+\b$"

这允许1 @ gmail.com%2 @ gmail.com或1 @ gmail.com && 2 @ gmail.com。我只想让它与Semicolmn分隔符一起使用。 1@gmail.com; 2@gmail.com。

3 个答案:

答案 0 :(得分:1)

您真的很亲密,只需删除单词边界,在字符类中避开连字符并更改最后一部分:

^(?>[\w+\-.%]+@gmail\.com(?:;\s*|$))+$

Demo

答案 1 :(得分:0)

如果我们看到的是有效的电子邮件,然后我们的案例仅限于问题中列出的案例,我们将对%&&进行简单替换,并以表达式类似于:

(%|&&)|($)

如果字符串的末尾可能不需要;,那么如果我理解正确的问题,那么该捕获组可能就可以工作:

(%|&&)

如果我们想验证,那么我们的表达式在设计上会变得有些复杂。

测试

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(%|&&)|($)";
        string substitution = @";";
        string input = @"1@gmail.com%2@gmail.com
1@gmail.com&&2@gmail.com";
        RegexOptions options = RegexOptions.Multiline;

        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    }
}

DEMO

答案 2 :(得分:0)

您可以拆分字符串,然后使用正则表达式验证每一封电子邮件:

public string addresses = "1@gmail.com;2@gmail.com";
public List<string> addressList = addresses.Split(";",StringSplitOptions.RemoveEmptyEntries);
public Regex rx = new Regex(@"^\w+([-+.']\w+)*@gmail.com$");

foreach(var email in addressList)
{
     var m = rx.Match(email);

     if(m.Success)
     {
        //Do something with match
     }
}

正则表达式改编自.Net General Match