用带连字符的字符串替换驼峰字符串

时间:2014-03-26 02:15:42

标签: c#

我如何更改字符串

  

关于我们

  

约-我们

如果可能的话,我希望能够使用正则表达式替换。 我试过了:

public static string ToHypenCase(this string source) {
    return Regex.Replace(source, @"[A-Z]", "-$1");
}

3 个答案:

答案 0 :(得分:11)

您可以使用正则表达式和ToLower()的组合来执行此操作,如下所示:

string s = "quickBrownFoxJumpsOverTheLazyDog";
string res = Regex.Replace(s, @"([a-z])([A-Z])", "$1-$2").ToLower();
Console.WriteLine(res);

Demo on ideone.

答案 1 :(得分:0)

您可以像这样更改扩展程序:

public static string ToHypenCase(this string source)
{
    var chars = source.ToList();
    for (int i = 0; i < chars.Count -1; i++)
    {
        if (!char.IsWhiteSpace(chars[i]) && char.IsUpper(chars[i + 1]))
        {
            chars[i + 1] = char.ToLower(chars[i + 1]);
            chars.Insert(i+1,'-');
        }
    }

    return new string(chars.ToArray());
}

或者只使用LINQ

var parts = "aboutUs".Select(x =>
        {
            if (char.IsUpper(x)) return "-" + char.ToLower(x);
            return x.ToString();
        });

var result = string.Join("", parts);

答案 2 :(得分:0)

我的版本使用StringBuilder ...

    public static string UrlConvert(string s)
    {
        if (string.IsNullOrEmpty(s)) return s;
        var sb = new StringBuilder();
        foreach (var ch in s.ToCharArray())
            if (char.IsUpper(ch))
            {
                if (sb.Length > 0) sb.Append("-");
                sb.Append(char.ToLower(ch));
            }
            else
            {
                sb.Append(ch);
            }

        return sb.ToString();
    }

和xUnit测试...

    [Theory]
    [InlineData("same", "same")]
    [InlineData("Simple", "simple")]
    [InlineData("MultiWord", "multi-word")]
    [InlineData("UsingAnAWord", "using-an-a-word")]
    [InlineData("SomeDigit4Used2", "some-digit4-used2")]
    public void UrlConvertWorks(string input, string expected)
    {
        Assert.Equal(expected, Meta.UrlConvert(input));
    }