2015-11-10 3 views
-3

Мне нужно заменить выражение в тексте, как в этом примере:Regex - Заменить код по ссылке

Testa M123456 testB Result = Testa www.test.com testB

Это string с символом 1 char M, за которым следуют 6 цифр, представляет собой код, который должен быть заменен гиперссылкой.

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

+0

Я забыл ответить, но спасибо. Решение работает отлично –

ответ

3

это должно сделать

string Result = Regex.Replace("estA M123456 testB", "M[0-9]{6}", "www.test.com"); 

картина M[0-9]{6} - это M следуют 6 цифр

0

Вы можете использовать пользовательские MatchEvaluator для перевода ссылок в зависимости от их числа:

private static Dictionary<int, string> knownLinks = new Dictionary<int, string>() 
{ 
    {123456, "www.test.com"}, 
    {999999, "www.foo.com"}, 
}; 

private static string LinkReplacer(Match match) 
{ 
    int linkNumber = Convert.ToInt32(match.Groups[1].Value); 
    string link = knownLinks[linkNumber]; 
    return link; 
} 

public static void Replace() 
{ 
    string text = "testA M123456 testB Result M999999 testC"; 
    string replacedText = Regex.Replace(text, "M([0-9]{6})", LinkReplacer); 

    Console.WriteLine(replacedText); 
} 


// output: testA www.test.com testB Result www.foo.com testC 

Некоторые пояснения:

  • Сначала мы создаем функцию LinkReplacer, которая говорит нам, как искать ссылку для заданного числа. Затем мы передаем нашу функцию LinkReplacer в Regex.Replace, которая будет использоваться как MatchEvaluator. Это означает, что Regex.Replace теперь пересылает каждый найденный экземпляр этому методу и извлекает заменяющую строку оттуда.
  • Скобки() в шаблоне M([0-9]{6}) говорят Regex, что это «Группа». В LinkReplacer вы можете видеть, что мы получаем доступ к этой группе для получения содержимого. (Мы также могли бы просто удалить первую букву всего матча, которая всегда является «М».)
  • Словарь предназначен только для примера; Я предполагаю, что у вас есть база данных где-то, откуда можно получить правильные ссылки.
  • Пример текста немного дольше, чтобы проверить, что все вхождения заменены, а не только первый, и что строка замены вычисляется для каждого отдельно.

Для получения дополнительной информации: https://msdn.microsoft.com/en-us/library/ht1sxswy(v=vs.110).aspx

+0

извините, я забыл ответить. Решение отлично работает ... спасибо –

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