拆分PascalCase字符串,除了首字母缩略词

Mat*_*hew 7 c# regex pascalcasing asp.net-mvc-3

我有一个需要人类可读的单词列表,例如FirstName到First Name,LastName到Last Name,在某些情况下,像ARB这样的首字母缩略词保持原样.后者最近被引入,并且由于我们的正则表达式返回AR Bs而导致显示问题.这就是我们所拥有的,我知道这对于首字母缩略词是不够的:

([A-Z][a-z]+)
Run Code Online (Sandbox Code Playgroud)

我在SO和其他网站上找到了能够使用首字母缩略词的其他表达式,但是它们适用于首字母缩略词在字符串中而不是整个字符串的字符串.我可以做简单的正则表达式,但这对我的技能来说太棘手了.我会提供其他测试示例,如果我有它们,但所有字符串工作正常,除了新的ARBs.谢谢.

更新:这是代码用法

string friendlyName = Regex.Replace(field.Name, "([A-Z][a-z]+)", " $1", RegexOptions.Compiled).Trim();
Run Code Online (Sandbox Code Playgroud)

Jim*_*hel 12

不会[A-Z]+[a-z]*这样吗?这应匹配一个或多个大写字母,后跟零个或多个小写字母.所以ARBs仍然是一个单一的实体,但CamelCase会分裂成Camel Case.

  • 其实已经想通了。使用 (?<!^)([AZ][az]|(?<=[az])[AZ]) 从[此处]得到这个(http://www.codeproject.com/Articles/108996/Splitting-带正则表达式增强的 Pascal-Camel-Case) (2认同)