我有一些看起来像的字符串。
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());
}
哪个工作正常,但它也会从字符串中删除()
。所以我的问题是如何删除号码并保留()
答案 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);
}