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

C# 如何从字符串中获取数字并将其存储在c中的变量中#,c#,asp.net,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(arr

我有这样一个值
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());
如果你发现自己经常使用这类代码,你可以引入一种实用扩展方法,例如

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

可以使用正则表达式

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;
            }
也许:

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

但总的来说,我不理解您对非常有效的
子字符串的保留。

您可以这样做:

string value = "ab48/2012";
var charArray = value.ToCharArray().
           Reverse().TakeWhile(c=>char.IsDigit(c)).Reverse().ToArray();
var resultString = new string(charArray);
  • 创建字符数组
  • 倒过来
  • 获取所有字符,直到第一个字符,而不是数字
  • 倒车
  • 传递到字符数组
  • 从该数组创建一个新字符串
var input=“ab48/2012”;
var regex=new regex(@“^[^\d]*(?\d*?)/(?\d*)$”;
var m=正则表达式匹配(输入);
如果(m.成功)
{
var a=m.Groups[“a”]值;
var b=m.组[“b”]值;
var aVal=int.Parse(a);
var bVal=int.Parse(b);
}
这个怎么样

int[] numbers = Regex.Split(Value, @"\D+")
                .Where(x => x.Length > 0)
                .Select(int.Parse)
                .ToArray();
注意:这不处理负数或带小数位的数字。

请尝试下面的代码

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

来点雷格斯福怎么样

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);
}
int值1、值2;
var match=Regex.match(值,@“^[^\d]*(?[\d]+)/(?[\d]+)”;
如果(匹配成功)
{
value1=int.Parse(match.Groups[“value1”].Value);
value2=int.Parse(match.Groups[“value2”].Value);
}

所有字符串都是相同格式的吗?尝试时发生了什么?尝试时发生了什么?数字可以是负数和/或有小数点吗?
是否可以不使用子字符串函数提取数字?
。是的。但是为什么要更改正在工作的代码呢?你认为你的代码错了什么?我假设OP不想使用
子字符串
,因为如果不能保证数字在一起,它将是一段稍微复杂一些的代码,例如
ab4c35
@James:OP只显示了一个示例,并且没有提到
子字符串
的实际问题或限制。这就是为什么我提到在输入格式严格的情况下,使用
Substring
或其他字符串函数没有什么不好的地方。这是最有效、最直接的方法,甚至比使用
Split
生成不必要的数组更有效。最初我投了反对票,因为你的答案只是说
你可以使用正则表达式。那不是答案。现在,您已经用代码和正则表达式对其进行了更新,我已经删除了下一票:)我理解了这个错误。Thx:)解释正则表达式的作用。从字符串到数组“result”中查找所有数字。我喜欢使用
的文字。任何东西都可以。很遗憾,很明显,你缺少选票是因为你的答案缺少正则表达式<代码>++投票
@C.Lang是的,我个人在使用Regex之前尽可能多地使用这个框架,即使在最好的时候,它们也可能很复杂。哦,那你一定会喜欢的!是的,多样性带来聪明!我喜欢这个答案!
var str = "ab48/2012";
            var strArr = string.Join("", str.Skip(2)).Split('/');
            Console.WriteLine(strArr[0]);
            Console.WriteLine(strArr[1]);
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);
}