在最后一次出现数值后删除所有内容

时间:2011-03-30 14:26:49

标签: c#

我需要删除最后一次数值后的所有内容,如下所示:

1234D应为1234
ABCD1234A_BC应为ABCD1234

6 个答案:

答案 0 :(得分:2)

此方法应该为您完成:

public string StripAfterLastNumber(string s)
{
       int index= s.LastIndexOfAny("0123456789".ToCharArray());
       return s.Remove(index+1);
}   

缩短版本:

public string StripAfterLastNumber(string s)
{
    return s.Remove(s.LastIndexOfAny("0123456789".ToCharArray())+1);
} 

答案 1 :(得分:1)

这是一种相当迂回的方式:

string testString = "1234D";
string result = testString.Substring(0, testString.Length - testString.Reverse().TakeWhile(c => !char.IsNumber(c)).Count());

修改:

更短(更快)的方式:

string result = testString.Substring(0, testString.LastOrDefault(testString.Last(char.IsNumber))+1);

答案 2 :(得分:1)

有很多方法可以用来实现这一目标。这是一个简单的代码片段:

string src = "ABCD1234A_BC";
string search = "0123456789";
int pos = src.LastIndexOfAny(search.ToCharArray());
string dst = src.Remove(pos+1);

答案 3 :(得分:0)

你走了:

public string StripAfterLastNumber(string input)
{
    //+1 because index is zero based
    int charsToTake = input.LastIndexOf(input.Last(c => char.IsNumber(c))) + 1;

    return input.Take(charsToTake).ToArray;
}

它查找输入中最后一个数字字符的位置,并将输入返回到该点。

答案 4 :(得分:0)

创建一个字符串的扩展方法,如下所示:

public static class StringExtensions

{

  public static string RemoveExcessTextAferLastDigit(this string str)
  {
     //find the last index in the str of any number
     int lastIndex = str.LastIndexOfAny("1234567890".ToCharArray());

     return lastIndex > -1 ? str.Substring(0, lastIndex + 1) : str;
  }

}

这将允许您调用您的扩展名,就像它是字符串类的原生一样:

private void button1_Click(object sender, EventArgs e)
  {
     textBox1.Text = textBox1.Text.RemoveExcessTextAferLastDigit();
  }

这通过了你的测试。

干杯,

CEC

答案 5 :(得分:0)

您可以使用正则表达式

public string strip(string s)
{
  return new Regex(@"^[\d\D].*\d").Match(s).ToString();
}