背後的邏輯是,你想每一個大寫字母轉換爲其小寫變體,並用下劃線preceed它(每個數字)。
例如,一個T
變成_t
,6
變成_6
。
唯一的例外是第一個字符。你不想在低於它的前面。正則表達式將使用negative lookbehind來處理這種情況,以便與第一個字符不匹配。
//using System.Text.RegularExpression
//your input
string input = "MyOtherTClass1Name";
//the regex
string result = Regex.Replace(
input,
"((?<!^)[A-Z0-9])", //the regex, see below for explanation
delegate(Match m) { return "_" + m.ToString().ToLower(); }, //replace function
RegexOptions.None
);
result = result.ToLower(); //one more time ToLower(); for the first character of the input
Console.WriteLine(result);
對於正則表達式本身:
( #start of capturing group
(?<! #negative lookbehind
^ #beginning of the string
) #end of lookbehind
[A-Z0-9] #one of A-Z or 0-9
) #end of capturing group
所以我們捕捉每一個大寫字母,每個數字(除了第一個字符),並用自己的小寫變型與組合替換它們先於下劃線。
您的示例不一致(爲什麼'CLass'被當作'Class'?),並且您需要顯示您的「不夠好」的嘗試。 –
@NielsKeurentjes我認爲MyOtherTCLassName是爲了MyOtherTClassName,人是正確的? –
我認爲,直到我看到了兩次相同的'錯誤'。 –