2011-04-30 3 views
1

안녕하세요, 라벨 안에 표시 할 텍스트가 있습니다.문자열의 발생을 문자열의 URL로 바꿉니다.

이 대신

"이봐 www.domain.com/ronald 및 www.domain로 변경

내가 뭘해야 할 것은"이봐 @ronald와 @ 톰 우리는 이번 주말에 가고있다 " .com/tom 우리는 이번 주말에 어디로 갈까? "

나는 누군가 다음 단계에서 무엇을해야 할지를 놓치지 만, stackoverflow로부터 떨어져 나가는 사람이 도움이되었다. 이 마지막 단어를 교체 무시하기 때문

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

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


     } 

나는 foreach 문에 레이블을 설정할 수 없습니다, 나는 감각을 만드는 중이 바랍니다.

답변

1

목록에있는 사용자 이름을 유지하십시오. 가장 긴 것부터 가장 짧은 것까지 반복하고 각각 @ [username]www.domain.com/[username]으로 바꿉니다. 가장 길게하는 가장 긴 이유는 "Hey, @tom 및 @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

+1

@pmillio - goi가 아닌 경우 그것들을 실제 링크로 바꾸려면 부분 일치 문제가 적용되지 않으며 @ Blim의 간단한 방법을 사용할 수 있습니다. – tvanfosson

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); 

     } 
    } 
관련 문제