3

私は文字列を持っています:CategoryName

と の間にスペースを追加する必要がCategoryありNameます。

そのため、各大文字の前にスペースを挿入する必要があります。

4

3 に答える 3

5
var input = "CategoryName";
var result = Regex.Replace(input, "([a-z])([A-Z])", @"$1 $2"); //Category Name

更新 (これは一連の大文字を 1 つの単語として扱います)

var input = "SimpleHTTPRequest";
var result = Regex.Replace(input, "([a-z]|[A-Z]{2,})([A-Z])", @"$1 $2");
//Simple HTTP Request
于 2013-04-16T08:20:51.247 に答える
4

このコードは仕事をします

var source = "CategoryName";
var nameConvert = new Regex(@"((?<=[a-z])[A-Z]|(?<!^|\s)[A-Z][a-z])");
var converted = nameConvert.Replace(source, " $1");

これにより、複数の大文字がまとめられます。たとえば、次のFearTheCIAReallyようになります。Fear The CIA Really

正規表現を説明するには:

  • (キャプチャ グループ $1 を開始
  • (?<=[a-z])[A-Z]大文字の前に小文字 (小文字をキャプチャしないでください)
  • |また
  • (?<!^|\s)前の文字はスペースや文字列の先頭ではありませんが、キャプチャしません
  • [A-Z]大文字
  • [a-z]小文字が続く
  • )攻略グループ1終了

私は実際にこれを常に使用するライブラリ関数として持っています

public static class StringExtensions {

   private static readonly Regex NameConvert =
                new Regex(@"((?<=[a-z])[A-Z]|(?<!^|\s)[A-Z][a-z])");

   public static string ToDisplayFormat(this string name) {
     return string.IsNullOrEmpty(name) ? 
       String.Empty :
       NameConvert.Replace(name," $1");
   }
}

そして、それをコードで使用できます

var name="CategoryName";
var displayName = name.ToDisplayFormat();
于 2013-04-16T08:20:27.230 に答える
0
([A-Z?])[_ ]?([a-z])

この正規表現を試してください。

それが役に立てば幸い。

于 2013-04-16T08:17:28.430 に答える