2016-05-18 3 views

答えて

8

から"VeryLongName"は、正規表現であることを行う方法である:ここでは

public static class StringExtensions 
{ 
    public static string PascalToKebabCase(this string value) 
    { 
     if (string.IsNullOrEmpty(value)) 
      return value; 

     return Regex.Replace(
      value, 
      "(?<!^)([A-Z][a-z]|(?<=[a-z])[A-Z])", 
      "-$1", 
      RegexOptions.Compiled) 
      .Trim() 
      .ToLower(); 
    } 
} 
+2

@Nasreddine私には1つの解決策がありますが、私は選択肢を見ることに興味があります。質問自体が適切である限り、自分の答えはSOで許されます。 – Mikhail

+0

ちょうどチェックされているだけでなく、許可されているだけでなく、[お勧め](https://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)。実際の解決策を提供するために+1してください。 – Nasreddine

+0

正解が既に投稿されていると回答しない人もいるかもしれないので、他の解決策を探していると言えるでしょう。 – Nasreddine

3

は、正規表現を使用せずにそれを行う方法です:

public static string PascalToKebabCase(this string str) 
{ 
    if (string.IsNullOrEmpty(str)) 
     return string.Empty; 

    var builder = new StringBuilder(); 
    builder.Append(char.ToLower(str.First())); 

    foreach (var c in str.Skip(1)) 
    { 
     if (char.IsUpper(c)) 
     { 
      builder.Append('-'); 
      builder.Append(char.ToLower(c)); 
     } 
     else 
     { 
      builder.Append(c); 
     } 
    } 

    return builder.ToString(); 
} 

あなたがうまくの問題を持っていると思います大文字を使用する既知の略語。例:COMObject。この解決策は明らかに機能しません。

関連する問題