2016-02-08 2 views
-3

мне нужно извлечь имя и фамилию из электронной строки а.имя и фамилия Extract из строки в C#

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

[email protected]

Или

[email protected]

И я пробовал этот код:

string Email1 = Email.ToString().ToUpper().Replace("@", ""); 
    if (Email1.Contains("XXXX.COM")) 
    { 
     Response.Write(Email1.ToString().Replace(".", " ").ToUpper().Remove(Email1.Length - 8, 8) + "<br />"); 
    } 
    else 
    { 
     Response.Write(Email1.ToString().Replace(".", " ").ToUpper().Remove(Email1.Length - 7, 7) + "<br />"); 
    } 

Этот код не работает только для этих адресов писем:

[email protected]

, потому что возвращение:

VINCENT NAPOLITAINX

Не работает:

[email protected]

, потому что возвращение:

MARK CHAINX

Не работает:

[email protected]

, потому что возвращение:

Никодим ANGELICUMX

Как сделать решить эту проблему?

Пожалуйста, помогите мне, большое вам спасибо.

+3

Вы пробовали - кашель - отлаживали его? Установка точки останова, переход по тестовому сценарию по строкам. Это базовое поведение программиста - скорее изучите его раньше, чем позже. Совершенно очевидно, что ваши строковые манипуляции отключены - вероятно, смещения ошибочны. X в конце указывает, что вы копируете один символ слишком много - так почему вы не копируете один меньше? – TomTom

+0

@TomTom спасибо Я пробовал с точкой останова на отладке для этого, я заметил ошибку –

+2

Что происходит с почтой, например 'mary.jean.napolitain @ xxxx.eu'? Или 'peter.smith.2 @ xxx.eu'? (потому что * Питер Смит * является таким частым именем, что вам нужно использовать дополнительные символы) –

ответ

2

упрощенным подход (на основе требований которые вы указали, которые кажутся немного странными):

var test = "[email protected]"; 
var name = test.Substring(0, test.IndexOf('@')).Replace(".", " "); 

Конечно, вы захотите добавить обработку исключений.

1

Один из вариантов, чтобы найти индекс . и индекс @ и делать подстроки на что:

string email = "[email protected]"; 

int periodIndex = email.IndexOf('.'); 
int atIndex = email.IndexOf('@'); 

string firstName = email.Substring(0, periodIndex); 
string lastName = email.Substring(periodIndex + 1, atIndex - periodIndex - 1); 

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

Это один будет делать:

(.*?)\.(.*?)@(.*) 

Первый захватом является первым названием, второй захват фамилии.

+0

Вкл, давай. Насколько мне нравится регулярное выражение - этот программист имеет проблемы с подсчетом (поскольку он копирует один символ слишком долго). И теперь вы хотите, чтобы он изучил REGEX ?Это довольно сложно для некоторых людей. – TomTom

+0

Хорошо. Исправлено это @TomTom. Добавлен регулярный способ их извлечения. –

5

почему вы не разделить ваш адрес по обе Seperator символов @ и .

string email = "[email protected]"; 
string[] result = email.Split('.', '@').ToArray(); 
string firstname = result[0]; 
string lastname = result[1]; 
2

Вы можете использовать String.split():

string email = "[email protected]"; 
string names = email.Split('@')[0]; 
string name = ""; 
string surname = ""; 
if (names.Contains('.')) 
{ 
    var nameSurname = names.Split('.'); 
    name = nameSurname[0]; // 
    surname = nameSurname[1]; 
} 
1

я бы просто использовать split для того, чтобы сделать это:

var nameDOTsurname = Email1.Split('@'); // This would leave in nameDOTsurname[0] the name.surname and in nameDOTsurname[1] the XXX.whatever 
var name = nameDOTsurname[0].Split('.')[0]; 
var surname = nameDOTsurname[0].Split('.')[1]; 
1

Вы можете использовать Regex Строчка:

(.+)\.(.+)(?=\@) 

Пояснение:

(.+) - Matches any character in a group 
\.  - Matches (.) dot 
(?=\@) - Exclude @ character 

Код:

var match = Regex.Match(email, pattern); 
var name = match.Groups[1].Value; 
var surname = match.Groups[2].Value; 
1

Это будет работать, если ваши почтовые палки формат адреса в [email protected] здесь есть код, который работает для вас ...

string e = "[email protected]"; 
string firstname = e.Substring(0, e.IndexOf(".")); 
string secondname = s.Substring(s.IndexOf(".")+1, s.IndexOf("@")-s.IndexOf(".")-1); 

Это работает для всех ваших писем

Смежные вопросы