我如何更改字符串
关于我们
要
约-我们
如果可能的话,我希望能够使用正则表达式替换。 我试过了:
public static string ToHypenCase(this string source) {
return Regex.Replace(source, @"[A-Z]", "-$1");
}
答案 0 :(得分:11)
您可以使用正则表达式和ToLower()
的组合来执行此操作,如下所示:
string s = "quickBrownFoxJumpsOverTheLazyDog";
string res = Regex.Replace(s, @"([a-z])([A-Z])", "$1-$2").ToLower();
Console.WriteLine(res);
答案 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));
}