using System.Text; using System.Text.RegularExpressions; namespace DysonNetwork.Drive.Extensions; public static class StringExtensions { private static readonly Regex _matchFirstCap = new(@"(.)([A-Z][a-z])"); private static readonly Regex _matchAllCap = new(@"([a-z0-9])([A-Z])"); public static string ToSnakeCase(this string input) { if (string.IsNullOrEmpty(input)) return input; // Handle the first character var result = new StringBuilder(); result.Append(char.ToLowerInvariant(input[0])); // Process the rest of the string for (int i = 1; i < input.Length; i++) { if (char.IsUpper(input[i])) { result.Append('_'); result.Append(char.ToLowerInvariant(input[i])); } else { result.Append(input[i]); } } // Replace any remaining uppercase letters with lowercase var output = result.ToString().ToLowerInvariant(); // Handle special cases (acronyms) output = _matchFirstCap.Replace(output, "$1_$2"); output = _matchAllCap.Replace(output, "$1_$2"); return output.ToLowerInvariant(); } }