User1454 Ответов: 3

Проверка правильности регулярных выражений для идентификатора электронной почты и номера телефона для всей строки вместо каждого слова файла в C#


Эй,
У меня есть набор файлов с идентификатором электронной почты и номером телефона, который не имеет фиксированного формата содержимого файла. Приложение должно читать файл строка за строкой и проверять каждую строку, существует ли идентификатор электронной почты или номер телефона или нет. Если он существует, его следует заменить на "_HIDE".
Например, :
abcdef sjifdjkf sjdkAaasa 122.345 11/10/2016 [u'hello@xyz.com'] 8989878787
Это должно быть заменено на :
abcdef sjifdjkf sjdkAaasa 122.345 11/10/2016 [u'_HIDE_@xyz.com'] _HIDE_

Это регулярное выражение должно проверяться для всей строки, а не для Слова в каждой строке.
Пожалуйста, помогите мне решить эту проблему.Заранее спасибо.

Что я уже пробовал:

Регулярное выражение для идентификатора электронной почты : \\ж+([-+.']\\ж+)*@\к примеру\W+([-.]\\ж+)*\\.\\ж+([-.]\\ж+)*
Регулярное выражение для номера телефона : '^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$

3 Ответов

Рейтинг:
20

#realJSOP

0) я думаю, что ваше регулярное выражение электронной почты довольно слабое. Попробуй вот это:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?


1) Почему бы просто не разделить строку на пробелы, регулярное выражение адреса электронной почты, а затем запустить номер телефона через этот метод расширения:

public static bool IsPhone(this string text)
{
    bool result = true;
    text = text.Replace("(","").Replace(")","").Replace("-","");
    long value;
    result = ((text.Length == 7 || text.Length == 10) && long.TryParse(text, out value));
    return result;
}


К сожалению, RegEx, вероятно, является лучшим парсером для проверки адресов электронной почты, но для телефонных номеров он вам не нужен. если вы анализируете тысячи записей,вы сэкономите значительное время, используя регулярное выражение только один раз вместо двух.


User1454

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

Рейтинг:
17

Surendra Reddy V

Попробовать это :

string strval = "";
           string strFormat = "abcdef sjifdjkf sjdkAaasa 122.345 11/10/2016 [u'hello@xyz.com'] 8989878787";
           Regex rg = new Regex(@"[A-Za-z0-9_\-\+]+@");
           strval = rg.Replace(strFormat, "_HIDE_@");
           string pat = @"\d{10}";
           Regex r1 = new Regex(pat);
           Match m = r1.Match(strFormat);
           if (m.Success)
           {
               strval = r1.Replace(strFormat, "_HIDE_");
           }


User1454

Привет Сурендра,
Это работает нормально, но когда идентификатор электронной почты, как [u'amith.hello@xyz.com'], это заменяет только [u'amith._HIDE_@xyz.com"]. Мне это нужно как [u'_HIDE_@xyz.com"]. Как заменить все имя, кроме доменного? Не могли бы вы предложить какое-нибудь решение?

Surendra Reddy V

Привет,

Просто измените регулярное выражение для электронной почты:
Regex rg = новое регулярное выражение (@"[A-Za-z0-9._\-\+]+@"); а попробуйте сейчас и посмотрите результат.

User1454

Эй Сурендра,
Огромное спасибо! Работает как шарм

Surendra Reddy V

Добро пожаловать :-)

User1454

Эй Сурендра,
Для номера телефона @ "\d{10} " если я прав, то это для 10-значного номера, верно? Так как же я могу сделать это для других стран, где длина телефонного номера варьируется?А также то, что идет с "+", например, таким образом +919580767876 также 333?

Рейтинг:
10

Patrice T

Всего несколько ссылок о регулярных выражениях
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]