Regex с несколькими адресами электронной почты, разделенными точкой с запятой - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь создать регулярное выражение, которое позволило бы нескольким электронным письмам разделяться точкой с запятой только для одного домена.

Это то, что у меня сейчас есть:

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

Это позволяет 1 @ gmail.com% 2 @ gmail.com или 1 @ gmail.com && 2 @ gmail.com.Я просто хочу, чтобы это было разрешено с разделителем точка с запятой, как это.1@gmail.com; 2@gmail.com.

Ответы [ 3 ]

1 голос
/ 31 мая 2019

Вы действительно близки, просто удалите границы слов, экранируйте дефис в классе символов и измените последнюю часть:

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

Демо

0 голосов
/ 31 мая 2019

Вы можете разделить свою строку, а затем использовать регулярное выражение для проверки электронной почты на каждом из них:

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

0 голосов
/ 31 мая 2019

Если у нас есть действительные электронные письма, которые появляются так, и тогда наши случаи ограничиваются перечисленными в вопросе, мы просто выполняем простую замену на % и &&, с выражением, похожим на:

(%|&&)|($)

Если конец строки может не нуждаться в ;, тогда эта группа захвата может просто работать, если я правильно понял проблему:

(%|&&)

Если бы мы захотели проверить, то наше выражение стало бы немного сложным для разработки.

Тест

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...