如何从linq C#中的字符串中取第一个数字

时间:2013-03-21 15:20:44

标签: c# linq linq-to-entities

我需要从字符串中取第一个数字,例如

"12345 this is a number " => "12345"
"123 <br /> this is also numb 2" => "123"

为此我使用C#代码:

    string number = "";
    foreach(char c in ebayOrderId)
    {
        if (char.IsDigit(c))
        {
            number += c;
        }
        else
        {
            break;
        }
    }
    return number;

如何通过LINQ做到这一点?

谢谢!

4 个答案:

答案 0 :(得分:8)

您可以尝试Enumerable.TakeWhile

ebayOrderId.TakeWhile(c => char.IsDigit(c));

答案 1 :(得分:2)

您可以使用LINQ TakeWhile获取数字列表,然后使用new string获取字符串编号

var number = new string(ebayOrderId.TakeWhile(char.IsDigit).ToArray());

答案 2 :(得分:0)

使用正则表达式

Regex re=new Regex(@"\d+\w");

尝试测试是否适用于http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

祝你好运!

答案 3 :(得分:0)

我会改进@ David的回答。 (\d+)[^\d]*:一个数字,后跟任何不是数字的数字。

您的电话号码将在第一组:

static void Main(string[] args)
{
    Regex re = new Regex(@"(\d+)[^\d]*", RegexOptions.Compiled);
    Match m = re.Match("123 <br /> this is also numb 2");

    if (m.Success)
    {
        Debug.WriteLine(m.Groups[1]);
    }
}