2011-04-30 56 views
1

嗨,我有一些文字,這意味着要在標籤中顯示。與URL字符串替換字符串occurence

「嘿@ronald和@湯姆我們要去哪裏這個週末」

什麼,我需要做的是將其更改爲這個代替

「嘿www.domain.com/ronald和www.domain .COM /湯姆我們去哪兒這個週末」

現在我有這個代碼,有人斷計算器幫我建立,但是我失去了對下一步該怎麼做。

 Regex regex = new Regex(@"@[\S]+"); 
     MatchCollection matches = regex.Matches(strStatus); 

     foreach (Match match in matches) 
     { 
      string Username = match.ToString().Replace("@", ""); 


     } 

我不能設置標籤在foreach因爲它會忽略最後一個字代替,我希望我做的意義。

回答

1

讓你在列表中找到用戶名。遍歷這些從最長到最短,取代的每次出現@ [用戶名]www.domain.com/[username]。之所以要做最長到最短爲避免更換部分匹配,如「嘿,@湯姆和@tomboy ......」這肯定是不做更換最有效的方式(因爲你做一個完整的串掃描每個用戶名,但由於你的榜樣,我懷疑你的字符串很短,缺乏效率的重量不到這種機制的簡單

var usernames = new List<string>(); 
Regex regex = new Regex(@"@[\S]+"); 
MatchCollection matches = regex.Matches(strStatus); 

foreach (Match match in matches) 
{ 
    usernames.Add(match.ToString().Replace("@", "")); 
} 

// do longest first to avoid partial matches 
foreach (var username in usernames.OrderByDescending(n => n.Length)) 
{ 
    strStatus = strStatus.Replace("@" + username, "www.domain.com/" + username); 
} 

如果你想構建實際的鏈接它會是什麼樣子:

strStatus = strStatus.Replace("@" + username, 
           string.Format("<a href='http://www.domain.com/{0}'>@{0}</a>", username)); 
+0

感謝這就是我要找的東西 – pmillio 2011-04-30 13:11:29

+1

@pmillio - 如果你不是goi納克與實際的聯繫,以取代他們,不完全匹配的問題不發揮作用,你可以用@ BLIM的更簡單的方法。 – tvanfosson 2011-04-30 13:14:44

1
  string strStatus = "Hey @ronald and @tom where are we going this weekend"; 

     Regex regex = new Regex(@"@[\S]+"); 
     MatchCollection matches = regex.Matches(strStatus); 

     foreach (Match match in matches) 
     { 
      string Username = match.ToString().Replace("@", ""); 
      strStatus = regex.Replace(strStatus, "www.domain.com/" + Username, 1); 

     } 
    }