c# - 如何将骆驼箱转换为蛇箱,两个大写字母相邻
问题描述
我正在尝试将骆驼案转换为蛇案。
像这样:
"LiveKarma"
-> "live_karma"
"youGO"
->"you_g_o"
我似乎无法让第二个示例像那样工作。它始终输出为 'you_go' 。我怎样才能让它输出'you_g_o'
我的代码:
(Regex.Replace(line, "(?<=[a-z0-9])[A-Z]", "_$0", RegexOptions.Compiled)).ToLowerInvariant()
解决方案
这是一个将文本转换为蛇形案例的扩展方法:
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"
推荐阅读
- php - SQL Query 运行良好,但现在当我尝试将它与 PHP 一起使用时,查询失败
- redis - 有效地限制 Redis 中两个集合之间的交集结果
- python - 如何制作图标在模板中显示
- cloud - 如何在云环境中操作决策树?
- javascript - 当你点击它时,如何让多个元素消失?
- html - 如何去除flex布局中的空白
- typescript - Typescipt:通过提供的参数定义类型
- intellij-idea - Windows 上 IntelliJ 的 Chmod?
- terraform - Terraform 0.12 语法将本地地图转换为列表输出
- sql - 计算 SQL 中的重复项并按特定列分区