2014-03-26 92 views
5

我將如何改變字符串替換駝峯串用連字符的字符串

關於我們

關於美國

我會喜歡能夠用正則表達式替換,如果可能的話。 我已經試過:

public static string ToHypenCase(this string source) { 
    return Regex.Replace(source, @"[A-Z]", "-$1"); 
} 

回答

9

你可以用正則表達式ToLower()的組合並做到這一點,就像這樣:

string s = "quickBrownFoxJumpsOverTheLazyDog"; 
string res = Regex.Replace(s, @"([a-z])([A-Z])", "$1-$2").ToLower(); 
Console.WriteLine(res); 

Demo on ideone.

0

你可以改變你的擴展方法是這樣的:

public static string ToHypenCase(this string source) 
{ 
    var chars = source.ToList(); 
    for (int i = 0; i < chars.Count -1; i++) 
    { 
     if (!char.IsWhiteSpace(chars[i]) && char.IsUpper(chars[i + 1])) 
     { 
      chars[i + 1] = char.ToLower(chars[i + 1]); 
      chars.Insert(i+1,'-'); 
     } 
    } 

    return new string(chars.ToArray()); 
} 

或者只是使用LINQ

var parts = "aboutUs".Select(x => 
     { 
      if (char.IsUpper(x)) return "-" + char.ToLower(x); 
      return x.ToString(); 
     }); 

var result = string.Join("", parts);