【问题标题】:Finding the first number in a string using .NET 3.5使用 .NET 3.5 查找字符串中的第一个数字
【发布时间】:2009-12-10 08:20:03
【问题描述】:

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

XXXX001
XXXXXXX004
XX0234X

这些有很多,我需要遍历它们并提取所有数字。

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

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

在我的情况下,我实际上需要索引,因为我正在对字符串进行更多分析(即,可能有一个范围 XXXX0234-0237XX 或一对 XXXXX0234&0238XX。

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

【问题讨论】:

  • 这个问题与 ASP.NET 无关。这是.NET 3.5 的问题。您应该更改标题。
  • @nailitdown:对于任何给定的字符串,我的回答仍然只会给你第一个数字的 ix
  • 如果您必须进行进一步处理(查找分隔符和第二个数字),那么也许正则表达式会得到回报。

标签: string .net-3.5 parsing find numbers


【解决方案1】:

很多人会为您的问题发布一个花哨的正则表达式解决方案,但我实际上更喜欢这个,尽管它确实需要手动输入所有数字

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

【讨论】:

  • 这会找到第一位数字的索引。除此之外,您还需要找到下一个非数字,然后做一个子字符串。三行而不是一行非常简单的正则表达式。
  • 什么?不,它已经完成了。 使用 ASP.NET 3.5 在字符串中查找数字的第一个实例的最快/最有效的方法是什么? 这就是整个问题。我认为您误读了有关循环的问题。它们实际上是正在迭代的不同字符串。不需要子字符串。
  • 很好的答案。当有这个更简单的解决方案时,我正在玩弄 linq 和正则表达式。
  • 我想要第一个非零数字,这很好。
【解决方案2】:

试试这样的

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

【讨论】:

    【解决方案3】:

    编辑:要一次性找到分隔符和第二个值,您可以使用这样的正则表达式。

    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);
                }
            }
    
        }
    }
    

    【讨论】:

    • 使用 regex.matches 获取所有结果并遍历它们
    猜你喜欢
    • 2018-01-19
    • 2020-02-14
    • 2018-09-18
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多