如何从字符串中获取数字并将其存储在c#中的变量中

时间:2013-07-02 08:57:30

标签: c# asp.net

我有一个像ab48/2012这样的值。如何从这个字符串中提取数字?我需要将48存储在一个变量中,将2012存储在另一个变量中。

是否可以在不使用子字符串函数的情况下提取数字? 如果有可能,请帮助我。

我试过这样的

string Value = "ab48/2012";
string[] array = value.Split('/');
int Value1 = Convert.ToInt32(array[0].Substring(2));
int Value2 = Convert.ToInt32(array[1].ToString());

8 个答案:

答案 0 :(得分:2)

这个怎么样?

int[] numbers = Regex.Split(Value, @"\D+")
                .Where(x => x.Length > 0)
                .Select(int.Parse)
                .ToArray();

注意:这不会处理带有小数位的负数或数字。

答案 1 :(得分:1)

string[] parts = "abc48/2012".Split('/');
int value1 = Int32.Parse(new String(parts[0].Where(Char.IsDigit).ToArray()));
int value2 = Int32.Parse(parts[1]);

如果你发现自己经常使用这种代码,你可以引入一种实用程序扩展方法,例如

public static string GetIntegersOnly(this string str)
{
    return new String(str.Where(Char.IsDigit).ToArray());
}
...
int value1 = Int32.Parse(parts[0].GetIntegersOnly())

答案 2 :(得分:1)

var input = "ab48/2012";
var regex = new Regex(@"^[^\d]*(?<a>\d*?)/(?<b>\d*)$");
var m = regex.Match(input);
if(m.Success)
{
    var a = m.Groups["a"].Value;
    var b = m.Groups["b"].Value;
    var aVal = int.Parse(a);
    var bVal = int.Parse(b);
}

答案 3 :(得分:0)

您可以使用正则表达式

var result = System.Text.RegularExpressions.Regex.Matches("abc48/2012", "[0-9]+", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            foreach(var val in result){
                var temp_variable = val;
            }

答案 4 :(得分:0)

也许:

string[] tokens = "ab48/2012".Split('/');
int num = int.Parse(new string(tokens.First().Where(Char.IsDigit).ToArray()));
int year = int.Parse(tokens.Last());

Demo

但总的来说,我不理解你对Substring的保留意见非常有效。

答案 5 :(得分:0)

你可以这样做:

string value = "ab48/2012";
var charArray = value.ToCharArray().
           Reverse().TakeWhile(c=>char.IsDigit(c)).Reverse().ToArray();
var resultString = new string(charArray);
  • 创建字符数组
  • 反转它
  • 获取所有字符,直到第一个不是数字
  • 倒退
  • 传递给char数组
  • 从该数组创建一个新字符串

答案 6 :(得分:0)

尝试以下代码

var str = "ab48/2012";
            var strArr = string.Join("", str.Skip(2)).Split('/');
            Console.WriteLine(strArr[0]);
            Console.WriteLine(strArr[1]);

答案 7 :(得分:0)

一些Regex fu怎么样?

int value1, value2;
var match = Regex.Match(value, @"^[^\d]*(?<value1>[\d]+)/(?<value2>[\d]+)");
if (match.Success)
{
    value1 = int.Parse(match.Groups["value1"].Value);
    value2 = int.Parse(match.Groups["value2"].Value);
}