2008-11-14 69 views
6

我想採用像「CountOfWidgets」這樣的pascal-cased字符串,並將其轉換爲像C#中的「Widgets計數」這樣更加用戶友好的字符串。多個相鄰的大寫字符應保持不變。什麼是最有效的方法來做到這一點?將一個Pascal格式的字符串拆分爲邏輯集合

注意:的重複.NET - How can you split a "caps" delimited string into an array?

+0

這不是一個重複的問題,因爲答案掛不滿足「多相鄰的大寫字母應保持不變「 – PandaWood 2017-03-29 00:53:36

回答

13

不知道有效率的,但至少它的簡潔:

Regex r = new Regex("([A-Z]+[a-z]+)"); 
string result = r.Replace("CountOfWidgets", m => (m.Value.Length > 3 ? m.Value : m.Value.ToLower()) + " "); 
+0

這會在」FormatRange「 - >」FormatRange「末尾留出空格 - 因此修剪將非常有用,並且檢查3的長度是確保」多個相鄰大寫字母應該是「的不可靠方法保持完好「。這只是希望任何少於3個字符的東西都應該留下。所以「PubID」轉到「publ ID」,這是不正確的 – PandaWood 2017-03-29 00:52:52