Есть ли хорошая функция, чтобы превратить что-то вроде
FirstName
:
Имя?
Есть ли хорошая функция, чтобы превратить что-то вроде
FirstName
:
Имя?
Смотрите: .NET. Как вы можете разделить "кепки" ? разделили строку в массив?
Особенно:
Regex.Replace("ThisIsMyCapsDelimitedString", "(\\B[A-Z])", " $1")
Здесь метод расширения, который я широко использовал для такого рода вещей
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.
Вы можете использовать регулярное выражение:
Match ([^^])([A-Z])
Replace $1 $2
В коде:
String output = System.Text.RegularExpressions.Regex.Replace(
input,
"([^^])([A-Z])",
"$1 $2"
);
Простейший путь:
var res = Regex.Replace("FirstName", "([A-Z])", " $1").Trim();
/// <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
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));