首页 > 解决方案 > 如何将骆驼箱转换为蛇箱,两个大写字母相邻

问题描述

我正在尝试将骆驼案转换为蛇案。

像这样:

"LiveKarma"-> "live_karma"
"youGO"->"you_g_o"

我似乎无法让第二个示例像那样工作。它始终输出为 'you_go' 。我怎样才能让它输出'you_g_o'

我的代码:

(Regex.Replace(line, "(?<=[a-z0-9])[A-Z]", "_$0", RegexOptions.Compiled)).ToLowerInvariant()

标签: c#regex

解决方案


这是一个将文本转换为蛇形案例的扩展方法:

using System.Text;

public static string ToSnakeCase(this string text)
{
    if(text == null) {
        throw new ArgumentNullException(nameof(text));
    }
    if(text.Length < 2) {
        return text;
    }
    var sb = new StringBuilder();
    sb.Append(char.ToLowerInvariant(text[0]));
    for(int i = 1; i < text.Length; ++i) {
        char c = text[i];
        if(char.IsUpper(c)) {
            sb.Append('_');
            sb.Append(char.ToLowerInvariant(c));
        } else {
            sb.Append(c);
        }
    }
    return sb.ToString();
}

将它放入某处的静态类(例如命名StringExtensions)并像这样使用它:

string text = "LiveKarma";
string snakeCaseText = text.ToSnakeCase();
// snakeCaseText => "live_karma"

推荐阅读