在驼峰标记上的单词之间插入空格

Old*_*Man 96 c#

是否有一个很好的功能来转变类似的东西

名字

对此:

名字?

mag*_*gma 167

请参阅:.NET - 如何将"大写"分隔的字符串拆分为数组?

特别:

Regex.Replace("ThisIsMyCapsDelimitedString", "(\\B[A-Z])", " $1")
Run Code Online (Sandbox Code Playgroud)

  • 正确处理首字母缩略词的正则表达式更好:`@"(\ B [AZ] +?(?= [AZ] [^ AZ])|\B [AZ] +?(?= [^ AZ]))"` (74认同)
  • @AviadP.首字母缩略词失败,例如"HTMLGuide"`→"H TML指南"` (7认同)
  • 修改了轻微的`Regex.Replace("ThisIsMy1stCapsDelimitedString","(\\ B [A-Z0-9])","$ 1")`以分割数字. (4认同)
  • 这实际上有效:(?<!^)([AZ] [az] |(?<= [az])[AZ])来自:https://www.codeproject.com/Articles/108996/Splitting-Pascal骆驼用RegEx增强功能 (2认同)

Zom*_*eep 116

这是我广泛用于此类事情的扩展方法

public static string SplitCamelCase( this string str )
{
    return Regex.Replace( 
        Regex.Replace( 
            str, 
            @"(\P{Ll})(\P{Ll}\p{Ll})", 
            "$1 $2" 
        ), 
        @"(\p{Ll})(\P{Ll})", 
        "$1 $2" 
    );
}
Run Code Online (Sandbox Code Playgroud)

它还处理像"IBMMakeStuffAndSellIt"这样的字符串,将其转换为"IBM Make Stuff And Sell It"(IIRC)

  • 语法说明:`{Ll}`是Unicode字符类别"字母小写"(而不是`{Lu}`"Letter大写").'P'是负匹配,而'p'是正匹配,所以`\ P {Ll}`字面意思是"不小写",而'p {Ll}`是"小写".所以这个正则表达式分裂了两种模式.1:"大写,大写,小写"(它将匹配'IBMMake'中的'MMa'并导致'IBM Make'),以及2."小写,大写"(在'MakeStuff'中匹配'eS' ").这涵盖了所有驼峰断点.提示:用连字符替换空格并调用"ToLower"以生成html5数据属性名称. (6认同)
  • 谢谢,效果很好!我只是想补充一点,我相信如果使用 Compiled 选项静态创建 Regex 对象而不是使用静态 Regex.Replace 方法,速度会快得多。 (2认同)
  • @Andrew我认为通常的约定是将首字母缩略词的所有字母小写,因此它将是“ibmMakeStuffAndSellIt”。 (2认同)

Tim*_*per 7

您可以使用正则表达式:

Match    ([^^])([A-Z])
Replace  $1 $2
Run Code Online (Sandbox Code Playgroud)

在代码中:

String output = System.Text.RegularExpressions.Regex.Replace(
                  input,
                  "([^^])([A-Z])",
                  "$1 $2"
                );
Run Code Online (Sandbox Code Playgroud)


小智 6

最简单的方法:

var res = Regex.Replace("FirstName", "([A-Z])", " $1").Trim();
Run Code Online (Sandbox Code Playgroud)