删除数字但保留字符串中的大括号

时间:2018-04-16 13:29:35

标签: c#

我有一些看起来像的字符串。

15 Hour(s)
10 Day(s)
5 Month(s)
2 Year(s)

上述字符串中的int可能会根据用户输入而改变。我想要实现的是我的最终字符串就像

Hour(s)
Day(s)
...

为此我创建了一个扩展方法如下:

public static string ExractLetter(this string original)
{
   return new string(original.Where(char.IsLetter).ToArray());
}

哪个工作正常,但它也会从字符串中删除()。所以我的问题是如何删除号码并保留()

6 个答案:

答案 0 :(得分:2)

如果你的字符串格式总是像15 Hour(s)那么你可以按空格Split()获取第二个元素,如

"15 Hour(s)".Split(' ')[1]

答案 1 :(得分:2)

您应该使用

跳过所有数字或数字的字符
return new string(original.Where(c => !char.IsDigit(c) && !char.IsNumber(c)).ToArray()).Trim();

答案 2 :(得分:2)

删除数字和空格的简单正则表达式怎么样。

var input = new Array { "15 Hour(s)", "10 Day(s)", "5 Month(s)", "2 Year(s)"};
var regex = new Regex(@"[\d\s]");

foreach (var str in input)
{
    Console.WriteLine(regex.Replace(str, string.Empty));
}

输出:

Hour(s)
Day(s)
Month(s)
Year(s)

答案 3 :(得分:1)

更简单的选择是跳过直到遇到第一个字母:

public static string ExractLetter(this string original)
{
   return new string(original.SkipWhile(!char.IsLetter).ToArray());
}

答案 4 :(得分:0)

这应该有效:

  public static string ExractLetter(this string original)
    {
       return new string(original.Where(d => !char.IsDigit(d)).ToArray());
    }

答案 5 :(得分:-2)

您可以使用正则表达式

public static string ExractLetter(this string original)
{
   return Regex.Replace(original, @"[\d-]", string.Empty);
}