Самый простой способ преобразовать URL-адрес в гиперссылку в строке C #?

StackOverflow https://stackoverflow.com/questions/32637

  •  09-06-2019
  •  | 
  •  

Вопрос

Я использую Twitter API и хочу преобразовать все URL-адреса в гиперссылки.

Какой наиболее эффективный способ, который вы придумали для этого?

От

string myString = "This is my tweet check it out http://tinyurl.com/blah";

Для

This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/>blah</a>
Это было полезно?

Решение

Регулярные выражения, вероятно, являются вашим другом для такого рода задач:

Regex r = new Regex(@"(https?://[^\s]+)");
myString = r.Replace(myString, "<a href=\"$1\">$1</a>");

Возможно, потребуется немного поработать над регулярным выражением для сопоставления URL-адресов.

Другие советы

Я проделал точно то же самое с jquery, использующий JSON API вот функция linkify:

String.prototype.linkify = function() {
    return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
        return m.link(m);
    });
 };

На самом деле это ужасная проблема.URL-адреса могут содержать знаки препинания (и заканчиваться на них), поэтому может быть трудно определить, где на самом деле заканчивается URL-адрес, когда он встроен в обычный текст.Например:

http://example.com/.

это допустимый URL-адрес, но с таким же успехом он может быть концом предложения:

I buy all my witty T-shirts from http://example.com/.

Вы не можете просто выполнить синтаксический анализ, пока не будет найден пробел, потому что тогда вы сохраните точку как часть URL-адреса.Вы также не можете просто выполнить синтаксический анализ, пока не будет найдена точка или пробел, потому что точки чрезвычайно распространены в URL-адресах.

Да, регулярное выражение здесь ваш друг, но создание соответствующего регулярного выражения - это сложная часть.

Проверьте и это тоже: Расширение URL-адресов с помощью регулярного выражения в .NET.

Вы можете добавить еще немного контроля над этим, используя функцию делегирования MatchEvaluator с регулярным выражением:предположим, у меня есть эта строка:

find more on http://www.stackoverflow.com 

теперь попробуйте этот код

private void ModifyString()
{
    string input = "find more on http://www.authorcode.com ";
                Regex regx = new Regex(@"\b((http|https|ftp|mailto)://)?(www.)+[\w-]+(/[\w- ./?%&=]*)?");
                string result = regx.Replace(input, new MatchEvaluator(ReplaceURl));
}

static string ReplaceURl(Match m)
{
    string x = m.ToString();
    x = "< a href=\"" + x + "\">" + x + "</a>";
    return x;
}

/болеем за Рэдвулвз

От:this.заменить(/[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/.=]+/, функция(m){...

видишь:/[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/.=]+/

Вот код для адресов "anyprotocol"://"anysubdomain/домен"."расширение и адрес любого домена".,

и это прекрасный пример для других применений манипулирования строками.вы можете нарезать кубиками по своему желанию с помощью .замените и вставьте соответствующие "a href" там, где это необходимо.

Я использовал jQuery, чтобы легко изменить атрибуты этих ссылок на "target =_blank" в моей логике загрузки контента, хотя метод .link не позволяет вам настраивать их.

Лично мне нравится привязывать пользовательский метод к объекту string для фильтрации строк "на лету" (объявление String.prototype.linkify), но я не уверен, как это будет выглядеть в крупномасштабной среде, где вам придется организовать более 10 пользовательских функций, подобных linkify.Я думаю, что на этом этапе вам определенно пришлось бы сделать что-то еще со своей структурой кода.

Может быть, сюда случайно забредет ветеринар и просветит нас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top