Не удается получить значение соответствия регулярного выражения в строке - PullRequest
2 голосов
/ 10 мая 2019

У меня есть форма со списком, в этом списке у меня есть данные из XML-файла.

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

string s = lstCust.SelectedItem.ToString();

Это дает мне: «Джон Доу, JohnDoe@stack.io телефон: 00336598745»

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

@"([A-Za-z0-9._ % -] +@[A-Za-z0-9.-] +\.[a-zA-Z]{2,4})*"

С помощью этого метода:

string mail = Regex.Match(s, @"([A-Za-z0-9._ % -] +@[A-Za-z0-9.-] +\.[a-zA-Z]{2,4})*").Value;

Я уверен, что мой Regex работает, потому что

Regex.Match(s, @"([A-Za-z0-9._ % -] +@[A-Za-z0-9.-] +\.[a-zA-Z]{2,4})*").Success.ToString();

дает мне true.

Но значение моей переменной mail всегда равно "" (пусто).

Есть идеи, что я делаю не так?

Thx

Ответы [ 3 ]

4 голосов
/ 10 мая 2019

В вашем шаблоне регулярных выражений есть пробелы, которые мешают его сопоставлению.Удалите пробелы и * в конце

string mail = Regex.Match(s, @"([A-Za-z0-9._ % -]+@[A-Za-z0-9.-]+\.[a-zA-Z]{2,4})").Value;

Пример шторма Regex

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

Попробуйте приведенное ниже регулярное выражение.

([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)

Он даст вам электронное письмо JohnDoe@stack.io из строки ввода Джон Доу, JohnDoe@stack.io телефон: 00336598745

Regex Demo

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

Ваше выражение на самом деле не совпадает. У вас есть * (0 или более вхождений) после вашей группы захвата. Поскольку выражение на самом деле не совпадает, оно находит 0 вхождений выражения в группе захвата, но из-за * это разрешено, поэтому сопоставление успешно.

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

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