class Program { static void Main(string[] args) { Console.WriteLine(Next("abc123def345ghi")); Console.Read(); } private static string Next(string s) { if (!isNumber(s.Substring(s.Length-1,1))) s = s + "0"; MatchCollection coll = Regex.Matches(s, @"\d+"); Match m = coll[coll.Count - 1]; return s.Substring(0, m.Index) + NextNum(m.Value); } private static string NextNum(string s) { char[] cs = s.ToCharArray(); for (int i = s.Length - 1; i >= 0; i--) { if (!NextChar(ref cs[i])) break; } string re = new string(cs); if (Int32.Parse(re) == 0) re = "1" + re; return re; } private static bool NextChar(ref char c) { string p = "01234567890123456789"; int n = p.IndexOf(c); c = p[(n + 1) % 10 + 10 * (n / 10)]; return (n == 9 || n == 19); } public static bool isNumber(string str) { Regex r = new Regex(@"^\d+(\.)?\d*$"); if (r.IsMatch(str)) { return true; } else { return false; } }