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

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

1234D应该是1234
ABCD1234A_BC应为ABCD1234

这个方法应该为你做:

 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); } 

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

 string src = "ABCD1234A_BC"; string search = "0123456789"; int pos = src.LastIndexOfAny(search.ToCharArray()); string dst = src.Remove(pos+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); 

干得好:

 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; } 

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

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

 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

您可以使用正则表达式

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