Заменить символ в строке - PullRequest
       2

Заменить символ в строке

0 голосов
/ 14 сентября 2010

как изменить

XXX@YYY.ZZZ на XXX_YYY_ZZZ

Один из известных мне способов - использовать метод string.replace (char, char),

, ноя хочу заменить "@" & "."Вышеупомянутый метод заменяет только один символ.

еще один случай - это что, если у меня есть XX.X@YYY.ZZZ ...

я все еще хочу, чтобы вывод выглядел как XX.X_YYY_ZZZ

Возможно ли это?Любые предложения спасибо

Ответы [ 7 ]

8 голосов
/ 14 сентября 2010

Итак, если я правильно понимаю, вы хотите заменить @ на _ и . на _, но только если . следует после @?Если есть гарантированный @ (при условии, что вы имеете дело с адресами электронной почты?):

string e = "XX.X@YYY.ZZZ";
e = e.Substring(0, e.IndexOf('@')) + "_" + e.Substring(e.IndexOf('@')+1).Replace('.', '_');
4 голосов
/ 14 сентября 2010

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

string[] inputs = { "XXX@YYY.ZZZ", "XX.X@YYY.ZZZ" };
string pattern = @"@|(?<=@.*?)\.";

foreach (var input in inputs)
{
    string result = Regex.Replace(input, pattern, "_");
    Console.WriteLine("Original: " + input);
    Console.WriteLine("Modified: " + result);
    Console.WriteLine();
}

Хотя это достаточно просто сделать с помощью пары строковых вызовов Replace.Эффективность - это то, что вам нужно будет проверить в зависимости от размера текста и количества замен, которые будет выполнять код.

3 голосов
/ 14 сентября 2010

Вы можете использовать следующий метод расширения, чтобы выполнить замену, не создавая слишком много временных строк (как это происходит с Substring и Replace) или не вызывая накладных расходов на регулярные выражения.Он переходит к символу @, а затем перебирает оставшиеся символы для выполнения замены.

public static string CustomReplace(this string s)
{
    var sb = new StringBuilder(s);
    for (int i = Math.Max(0, s.IndexOf('@')); i < sb.Length; i++)
        if (sb[i] == '@' || sb[i] == '.')
            sb[i] = '_';
    return sb.ToString();
}
3 голосов
/ 14 сентября 2010

Вы можете использовать метод Regex.Replace:

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace(v=VS.90).aspx

0 голосов
/ 14 сентября 2010

Предполагая, что формат данных похож на XX.X@YYY.ZZZ, вот еще один вариант с String.Split (разделитель символов):

string[] tmp = "XX.X@YYY.ZZZ".Split('@');
string newstr = tmp[0] + "_" + tmp[1].Replace(".", "_");
0 голосов
/ 14 сентября 2010

Создайте массив с символами, которые вы хотите заменить, выполните цикл по массиву и выполните замену на основе индекса.

0 голосов
/ 14 сентября 2010

Вы можете заменить цепь

var newstring =    "XX.X@YYY.ZZZ".Replace("@","_").Replace(".","_");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...