С# string.split() отдельная строка в верхнем регистре

Я использовал метод Split() для разделения строк. Но эта работа, если вы установите некоторый символ для условия в string.Split(). Есть ли способ разделить строку, когда отображается Uppercase?

Можно ли получить несколько слов из некоторой не разделенной строки, например:

DeleteSensorFromTemplate

И строка результата должна выглядеть следующим образом:

Delete Sensor From Template

Ответ 1

Используйте Regex.split

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

Ответ 2

Если вам не нравится 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();
}

Ответ 3

Другой способ с регулярным выражением:

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