Вставка пробелов между словами на токене с верблюжьей линией

Есть ли хорошая функция, чтобы превратить что-то вроде

FirstName

:

Имя?

Ответ 2

Здесь метод расширения, который я широко использовал для такого рода вещей

public static string SplitCamelCase( this string str )
{
    return Regex.Replace( 
        Regex.Replace( 
            str, 
            @"(\P{Ll})(\P{Ll}\p{Ll})", 
            "$1 $2" 
        ), 
        @"(\p{Ll})(\P{Ll})", 
        "$1 $2" 
    );
}

Он также обрабатывает строки вроде IBMMakeStuffAndSellIt, преобразуя их в IBM Make Stuff And Sell It (IIRC).

Синтаксическое объяснение (кредит):

{Ll} - это категория символов Unicode "Буква строчная" (в отличие от {Lu} "Заглавная буква"). P - отрицательное совпадение, в то время как p - положительное совпадение, поэтому \P{Ll} буквально "не строчные", а p{Ll} "строчные".
Таким образом, это регулярное выражение разбивается на две модели. 1: "Прописные, Прописные, Прописные" (что соответствует MMa в IBMMake и результат в IBM Make), и 2. "Строчные, прописные" (которое будет соответствовать в eS в MakeStuff). Это охватывает все контрольные точки верблюжьего тела.
СОВЕТ: замените пробел дефисом и вызовите ToLower, чтобы получить имена атрибутов данных HTML5.

Ответ 3

Вы можете использовать регулярное выражение:

Match    ([^^])([A-Z])
Replace  $1 $2

В коде:

String output = System.Text.RegularExpressions.Regex.Replace(
                  input,
                  "([^^])([A-Z])",
                  "$1 $2"
                );

Ответ 4

Простейший путь:

var res = Regex.Replace("FirstName", "([A-Z])", " $1").Trim();

Ответ 5

    /// <summary>
    /// Parse the input string by placing a space between character case changes in the string
    /// </summary>
    /// <param name="strInput">The string to parse</param>
    /// <returns>The altered string</returns>
    public static string ParseByCase(string strInput)
    {
        // The altered string (with spaces between the case changes)
        string strOutput = "";

        // The index of the current character in the input string
        int intCurrentCharPos = 0;

        // The index of the last character in the input string
        int intLastCharPos = strInput.Length - 1;

        // for every character in the input string
        for (intCurrentCharPos = 0; intCurrentCharPos <= intLastCharPos; intCurrentCharPos++)
        {
            // Get the current character from the input string
            char chrCurrentInputChar = strInput[intCurrentCharPos];

            // At first, set previous character to the current character in the input string
            char chrPreviousInputChar = chrCurrentInputChar;

            // If this is not the first character in the input string
            if (intCurrentCharPos > 0)
            {
                // Get the previous character from the input string
                chrPreviousInputChar = strInput[intCurrentCharPos - 1];

            } // end if

            // Put a space before each upper case character if the previous character is lower case
            if (char.IsUpper(chrCurrentInputChar) == true && char.IsLower(chrPreviousInputChar) == true)
            {   
                // Add a space to the output string
                strOutput += " ";

            } // end if

            // Add the character from the input string to the output string
            strOutput += chrCurrentInputChar;

        } // next

        // Return the altered string
        return strOutput;

    } // end method

Ответ 6

Regex:

http://weblogs.asp.net/jgalloway/archive/2005/09/27/426087.aspx http://stackoverflow.com/info/773303/splitting-camelcase

(возможно, лучший - см. второй ответ) http://bytes.com/topic/c-sharp/answers/277768-regex-convert-camelcase-into-title-case

Чтобы преобразовать из UpperCamelCase в Title Case, используйте эту строку: Regex.Replace( "UpperCamelCase", @ "(\ В [A-Z])", @ "$ 1" );

Преобразование из нижней части CamelCase и UpperCamelCase в заголовок, используйте MatchEvaluator: общедоступная строка toTitleCase (совпадение m) { charс = m.Captures [0].Value [0]; вернуть ((С >= 'а') && (с & ЛТ = 'Z')) Char.ToUpper(с).ToString():? "" + c;} и немного измените ваше регулярное выражение с этой строкой: Regex.Replace( "UpperCamelCase или lowerCamelCase", @ "(\ Ь [а-г] |\B [A-Z])", новый MatchEvaluator (toTitleCase));