在最后一次出现数值后删除所有内容
我需要在最后一次出现数值之后删除所有内容,如下所示:
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(); }