从字符串中获取第一个数字

时间:2014-12-10 12:07:49

标签: c# string numbers substring

我想在字符串中获取第一个数字实例。

所以我得到了这个输入字符串,可能是以下之一:

1: "Event: 1 - Some event"
2: "Event 12 -"
3: "Event: 123"
4: "Event: 12 - Some event 3"

输入字符串的输出必须为:

1: 1
2: 12
3: 123
4: 12

我尝试了以下方法,但它们都没有给我我想要的东西。

number = new String(input.ToCharArray().Where(c => Char.IsDigit(c)).ToArray());
//This gives me all the numbers in the string

var index = input.IndexOfAny("0123456789".ToCharArray());
string substring = input.Substring(index, 4);
number = new string(substring.TakeWhile(char.IsDigit).ToArray());
//This gives me first number and then the numbers in the next 4 characters. However it breaks if there is less than 4 characters after the first number.
编辑:很多人发布了很好的解决方案,但我最终接受了我在代码中实际使用的解决方案。我希望我能接受更多答案!

4 个答案:

答案 0 :(得分:8)

使用Linq执行此操作的正确方法如下

number = new string(input.SkipWhile(c=>!char.IsDigit(c))
                         .TakeWhile(c=>char.IsDigit(c))
                         .ToArray());

基本上跳过不是数字的所有内容,然后在不再是数字时停止使用字符。请注意,这将停留在标点符号,因此它不会像&#34; 30.5&#34;一个字符串。如果你需要处理数字中的标点符号,那么正则表达式将是最佳选择。另请注意,您不需要执行ToCharArray,因为字符串实现了IEnumerable<char>,这是Linq所需的全部内容。

此外,您必须将.Net 4.0作为他们添加SkipWhileTakeWhile扩展程序时的目标。

答案 1 :(得分:7)

在我看来,你只需要一个正则表达式:

using System;
using System.Text.RegularExpressions;

public class Test
{
    static void Main()
    {
        ExtractFirstNumber("Event: 1 - Some event");
        ExtractFirstNumber("Event: 12 -");
        ExtractFirstNumber("Event: 123");
        ExtractFirstNumber("Event: 12 - Some event 3");
        ExtractFirstNumber("Event without a number");
    }

    private static readonly Regex regex = new Regex(@"\d+");
    static void ExtractFirstNumber(string text)
    {
        var match = regex.Match(text);
        Console.WriteLine(match.Success ? match.Value : "No match");
    }
}

第一场比赛将仅从第一位开始,并将停在第一位非数字(或字符串的结尾)。如果需要,您可以使用匹配的LengthIndex属性来计算字符串中的位置。

答案 2 :(得分:1)

see if this helps
 var input = "sdmfnasldkfjhasdlfkjh234sdf234234";
        var index = input.IndexOfAny("0123456789".ToCharArray());
        string substring = input.Substring(index); // this will give rest of the string.
        number = new string(substring.TakeWhile(char.IsDigit).ToArray());

        //number will have 234

答案 3 :(得分:0)

使用正则表达式来获得结果。

有关正则表达式的详细信息,请参阅this

    String s1= "Event: 1 - Some event";
    String s2=  "Event 12 -";
    String s3= "Event: 123";
    String s4=  "Event: 12 - Some event 3";


    String result1 = System.Text.RegularExpressions.Regex.Match(s1, @"\d+").Value;
    String result2 = System.Text.RegularExpressions.Regex.Match(s2, @"\d+").Value;
    String result3 = System.Text.RegularExpressions.Regex.Match(s3, @"\d+").Value;
    String result4 = System.Text.RegularExpressions.Regex.Match(s4, @"\d+").Value;
相关问题