从String中获取第一个数字

时间:2012-01-31 13:42:14

标签: c# regex string

-->

如何从字符串中获取第一个数字?

示例:我有“1567438absdg345”

我只想得到“1567438”没有“absdg345”,我希望它是动态的,首先出现Alphabet索引并删除它之后的所有内容。

8 个答案:

答案 0 :(得分:32)

您可以使用TakeWhile扩展名方法从字符串中获取字符,只要它们是数字:

string input = "1567438absdg345";

string digits = new String(input.TakeWhile(Char.IsDigit).ToArray());

答案 1 :(得分:18)

Linq方法:

string input = "1567438absdg345";
string output = new string(input.TakeWhile(char.IsDigit).ToArray());

答案 2 :(得分:7)

或正则表达式方法

String s = "1567438absdg345";
String result = Regex.Match(s, @"^\d+").ToString();

^匹配字符串的开头,\d+匹配以下数字

答案 3 :(得分:6)

您可以遍历字符串并通过Char.isDigit测试当前字符是否为数字。  

string str = "1567438absdg345";
string result = "";

for (int i = 0; i < str.Length; i++) // loop over the complete input
{
    if (Char.IsDigit(str[i])) //check if the current char is digit
        result += str[i];
    else
        break; //Stop the loop after the first character
}

答案 4 :(得分:4)

忘记正则表达式,在某处创建一个辅助函数...

string input = "1567438absdg345";
string result = "";

foreach(char c in input)
{
   if(!Char.IsDigit(c))
   {
      break;
   }
   result += c;
}

答案 5 :(得分:1)

另一种方法

private int GetFirstNum(string inp)
{
    string final = "0"; //if there's nothing, it'll return 0
    foreach (char c in inp) //loop the string
    {
        try
        {
            Convert.ToInt32(c.ToString()); //if it can convert
            final += c.ToString(); //add to final string
        }
        catch (FormatException) //if NaN
        {
            break; //break out of loop
        }
    }

    return Convert.ToInt32(final); //return the int
}

测试:

    Response.Write(GetFirstNum("1567438absdg345") + "<br/>");
    Response.Write(GetFirstNum("a1567438absdg345") + "<br/>");

结果:

1567438
0

答案 6 :(得分:1)

通过这种方式,您可以从字符串中获取第一个数字。

string stringResult = "";
bool digitFound = false;
foreach (var res in stringToTest)
{
    if (digitFound && !Char.IsDigit(res))
        break;
    if (Char.IsDigit(res))
    {
        stringResult += res;
        digitFound = true;
    }
}

int? firstDigitInString = digitFound ? Convert.ToInt32(stringResult) : (int?)null;

应该这样做的另一种选择:

string[] numbers = Regex.Split(input, @"\D+");

我不知道为什么上面的数字列表中出现空字符串?

像下面这样解决,但是似乎正则表达式应该改进以立即进行。

string[] numbers = Regex.Split(firstResult, @"\D+").Where(x => x != "").ToArray();

答案 7 :(得分:0)

一种老式的正则表现主义方式:

public long ParseInt(string str)
{
    long val = 0;
    System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^([\d]+).*$");
    System.Text.RegularExpressions.Match match = reg.Match(str);
    if (match != null) long.TryParse(match.Groups[1].Value, out val);
    return val;
}

如果无法解析,则该方法返回0.

相关问题
最新问题