2015-06-01 3 views
0

мой вход [email protected]Соответствующий способ заменить строку?

Я хочу заменить xyz.com с mnop.com

Таким образом, окончательный результат будет [email protected]

Настоящий способ

var input = "[email protected]"; 
var output = input.Split('@')[0] + "@mnop.com"; 

Что такое правильный путь? Любое регулярное выражение?

+3

Я думаю, что это хорошо. – anubhava

+0

Если вы хотите заменить X на Y, почему бы не 'input.Replace (X, Y);'? Нет необходимости в регулярных выражениях или разбиениях. –

+0

Да, все в порядке, постоянные люди стоят дорого для этой задачи. –

ответ

1

Заменить функцию образца (с правильной ручкой исключения)

/// <summary> 
/// replace email domain 
/// </summary> 
/// <param name="email"> email </param> 
/// <param name="newDomain"> new domain </param> 
/// <returns></returns> 
private string ReplaceMailDomain(string email, string newDomain) 
{ 
    if (email == null) throw new ArgumentNullException("email"); 

    int pos = email.IndexOf('@'); 
    if (pos < 0) 
    { 
     throw new ArgumentException("Invalid email", "email"); 
    } 
    else 
    { 
     return email.Substring(0, pos + 1) + newDomain; 
    } 
} 

Использование:

string email = ReplaceMailDomain("[email protected]", "mnop.com"); 
-2

Предполагая, что адрес будет действительным, то есть есть только один символ @, вы можете использовать простую функцию Replace()

var domain = "xyz.com"; 
var newdomain = "xyz.com"; 

var input = "[email protected]"; 
var output = input.Replace("@" + domain, "@" + newdomain); 

Regexps будет избыточна для этого.

Если вы хотите удалить любого доменного имени и заменить его, а затем использовать Substring() и IndexOf() для этого

var output = input.Substring(0, input.IndexOf('@') + 1) + newdomain; 

Обратите внимание, что это вызовет исключение, если строка не содержит символ @.

+1

А если xyz.com не известно во время компиляции? Кроме того, «* расколы слишком много для этого *», серьезно? – James

+1

@James Тогда это еще один вопрос, верно? –

+1

Я действительно не считаю, что downvoting основан на «OP * мог бы * хотеть что-то другое», если бы они явно не говорили об этом. –

0

Если вы знаете перед собой строку, которую ищете, вы можете просто использовать нормальный Replace(string toFind, string replacement). Вы можете использовать indexof и substring, чтобы получить доменное имя.

Учитывая ниже:

 string input = "[email protected]"; 
     string domain = input.Substring(input.IndexOf('@') + 1); 
     Console.WriteLine(input.Replace(domain, "mnop.com")); 

Это дает

[email protected] 
0

Если вы просто хотите, чтобы «взять что-то, прежде чем @ знак и добавить некоторое доменное имя», то один из возможных подходов

var input = "[email protected]"; 
var output = input.Substring(0, input.IndexOf('@')) + "@mnop.com"; 

Немного «легкий», чем с использованием Split, потому что он не создает массив (и на самом деле вам не нужен массив, так как вы используете только его первый элемент).

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