2008-11-14 71 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