将 Pascal-case 字符串拆分为逻辑单词集合

6
我想将像“CountOfWidgets”这样的帕斯卡命名字符串转换为更加用户友好的形式,例如C#中的“Count of Widgets”。多个相邻的大写字符应保持不变。最有效的方法是什么? 注意:重复的问题,请参见.NET - How can you split a "caps" delimited string into an array?

这不是一个重复的问题,因为链接到的答案没有考虑“多个相邻的大写字符应该保持不变”。 - PandaWood
1个回答

16

虽然不知道是否高效,但至少很简洁:

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

1
这会在“FormatRange”末尾留下一个空格 -> “FormatRange ”-因此修剪很有用,并且检查长度为3是一种不可靠的方法,以确保“多个相邻的大写字母应该保持不变”。这只是希望任何少于3个字符的内容都应该被保留。所以“PubID”变成了“publ ID”,这是不正确的。 - PandaWood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接