私は文字列を持っています:CategoryName
と の間にスペースを追加する必要がCategory
ありName
ます。
そのため、各大文字の前にスペースを挿入する必要があります。
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
このコードは仕事をします
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();
([A-Z?])[_ ]?([a-z])
この正規表現を試してください。
それが役に立てば幸い。