Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用.NET 3.5查找字符串中的第一个数字_String_.net 3.5_Parsing_Find_Numbers - Fatal编程技术网

String 使用.NET 3.5查找字符串中的第一个数字

String 使用.NET 3.5查找字符串中的第一个数字,string,.net-3.5,parsing,find,numbers,String,.net 3.5,Parsing,Find,Numbers,我有一堆字符串需要从中提取数字。它们的格式如下: XXXX001 XXXXXXX004 XX0234X 有很多这样的,我需要循环它们,提取所有的数字 那么,使用ASP.NET 3.5查找字符串中数字的第一个实例的最快/最有效的方法是什么 更新 我应该包括更多的信息获取答案,为我提供如何提取所有数字的想法,而不是找到第一个索引。这不是问题——我相信其他人会发现它们很有用 在我的例子中,我实际上需要索引,因为我正在对字符串进行更多的分析(例如,可能有一个范围XXXX0234-0237XX或一对xx

我有一堆字符串需要从中提取数字。它们的格式如下:

XXXX001
XXXXXXX004
XX0234X
有很多这样的,我需要循环它们,提取所有的数字

那么,使用ASP.NET 3.5查找字符串中数字的第一个实例的最快/最有效的方法是什么

更新 我应该包括更多的信息获取答案,为我提供如何提取所有数字的想法,而不是找到第一个索引。这不是问题——我相信其他人会发现它们很有用

在我的例子中,我实际上需要索引,因为我正在对字符串进行更多的分析(例如,可能有一个范围XXXX0234-0237XX或一对xxxxx 0234&0238XX)


找到第一个数字的索引有助于我找到字符串中感兴趣的部分进行检查。

很多人都会发布一个奇特的正则表达式来解决您的问题,但我实际上更喜欢这样,尽管它确实需要手动键入所有数字

int ix = myString.IndexOfAny('1', '2', '3', '4', '5', '6', '7', '8', '9', '0');

试试这样的

string s = "XX0234X";
Regex rg = new Regex("\\d+");
Match m = rg.Match(s);

编辑:要一次性找到分隔符和第二个值,可以使用如下正则表达式

using System;
using System.Text.RegularExpressions;

class Program {
    static void Main(string[] args) {

        string[] strings = new string[] {
            "XXXX001&042",
            "XXXXXXX004-010XXX",
            "XX0234X"
        };

        Regex regex = new Regex(@"(?<first>\d+)((?<separator>[-&])(?<second>\d+))?");
        foreach (string s in strings){
            Match match = regex.Match(s);
            Console.WriteLine("First value: {0}",match.Groups["first"].Value);
            if (match.Groups["separator"].Success) {
                Console.WriteLine("Separator: {0}", match.Groups["separator"].Value);
                Console.WriteLine("Second value: {0}", match.Groups["second"].Value);
            }
        }

    }
}
使用系统;
使用System.Text.RegularExpressions;
班级计划{
静态void Main(字符串[]参数){
字符串[]字符串=新字符串[]{
“XX001和042”,
“XXXXXXX 004-010XXX”,
“XX0234X”
};
正则表达式正则表达式=新正则表达式(@“(?\d+)((?[-&])(?\d+))”;
foreach(字符串中的字符串s){
匹配=正则表达式匹配;
WriteLine(“第一个值:{0}”,match.Groups[“First”].value);
if(匹配组[“分隔符”]。成功){
WriteLine(“分隔符:{0}”,match.Groups[“Separator”].Value);
WriteLine(“第二个值:{0}”,match.Groups[“Second”].value);
}
}
}
}

这将查找第一个数字的索引。除此之外,您还需要查找下一个非数字,然后执行子字符串。三行而不是一行非常简单的正则表达式。什么?不,这样就完成了。使用ASP.NET 3.5,在字符串中查找数字的第一个实例的最快/最有效的方法是什么?这就是整个问题我想你误读了关于循环的问题。它们实际上是被迭代的不同字符串。不需要子字符串。回答得很好。我在用linq和regex,当时有一个更简单的解决方案。我想要第一个非零数字,这很好。这个问题与ASP.NET无关。它是.NET 3.5问题。您应该更改标题。@nailitdown:我的答案仍然会给出任何给定字符串的第一个数字tho的ix。如果您必须进行进一步处理(查找分隔符和第二个数字),则正则表达式可能会有回报。若要获得所有结果,请使用regex.matches并循环使用它们