C# usuwanie linków z tekstu


(Nero43) #1

Witam,

czy ktoś z was wie może jak usunąć linki z tekstu? Chodzi mi o coś takiego:

to jest bardzo fajny tekst http://www.link.com ciąg dalszy tekstu

I teraz mam problem, ponieważ nie wiem jak usunąć link bez znaczników html. Linki są różnej długości i nie zawsze kończą się na domenie  tylko jest jakaś podstrona.


(stasinek) #2

spacją w adresie ich nie ma

 

ustawiasz int zaczyn na 0

pobierasz długość int len = tekst.Length

tworzysz stringa gotowy = “”;

lecisz pętlą do {

start_adresu = “http://”);

if (start==-1) { gotowy += substring(zaczyn,len-zaczyn); break; }

else gotowy += substring(zaczyn,start_adresu-zaczyn)

koniec_adresu = http://msdn.microsoft.com/en-us/library/ms131434%28v=vs.110%29.aspx (’ ',start,len-start);

if (koniec==-1) break;

zaczyn = koniec+1;

if (zaczyn >= let) break;

while(1)

 

i gotowe, przy okazji koniec+1 wykasuje się jedna zbędna spacja


(enedil) #3

Jeszcze uwzględnij https.


(pebal) #4
string text = "to jest bardzo fajny tekst http://www.link.com ciąg dalszy tekstu";

StringBuilder sb = new StringBuilder();
foreach(string s in text.Split(' '))
{
  if (s.Length < 4 || (s.Substring(0, 4) != "www." && (s.Length < 5 || s.Substring(0, 5) != "http:") && (s.Length < 6 || s.Substring(0, 6) != "https:")))
  {
    sb.Append(s).Append(' ');
  }
}

if (sb.Length > 0)
  sb.Remove(sb.Length - 1, 1);

text = sb.ToString();

(Jim1961) #5

bazując na http://stackoverflow.com/a/20651284

var input = "to jest bardzo. fajny tekst http://www.link.com ciąg www.onet.pl?id=123 dalszy google.com#aha tekstu ftp://example.com";
var pattern = @"(http|https|ftp|)\://|[a-zA-Z0-9\-\.]+\.[a-zA-Z](:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s] ";
var output = new Regex(pattern).Replace(input + " ", "");

  :smiley: