web-dev-qa-db-ja.com

C#string.split()文字列を大文字で区切る

私はSplit()メソッドを使用して文字列を分割してきました。ただし、これは、string.Split()で条件に文字を設定すると機能します。 Uppercaseが表示されているときに文字列を分割する方法はありますか?

次のような分離されていない文字列からいくつかの単語を取得することは可能ですか?

DeleteSensorFromTemplate

結果の文字列は次のようになります。

Delete Sensor From Template
13
evelikov92

使用する Regex.split

string[] split =  Regex.Split(str, @"(?<!^)(?=[A-Z])");
21
Avinash Raj

RegExが気に入らず、不足しているスペースを挿入したいだけの場合は、これでも機能します。

public static string InsertSpaceBeforeUpperCase(this string str)
{   
    var sb = new StringBuilder();

    char previousChar = char.MinValue; // Unicode '\0'

    foreach (char c in str)
    {
        if (char.IsUpper(c))
        {
            // If not the first character and previous character is not a space, insert a space before uppercase

            if (sb.Length != 0 && previousChar != ' ')
            {
                sb.Append(' ');
            }           
        }

        sb.Append(c);

        previousChar = c;
    }

    return sb.ToString();
}
4
ChriPf

正規表現の別の方法:

public static string SplitCamelCase(string input)
{
   return System.Text.RegularExpressions.Regex.Replace(input, "([A-Z])", " $1", System.Text.RegularExpressions.RegexOptions.Compiled).Trim();
}
0
Artem Bakhmat