Найти и извлечь число из строки - PullRequest
275 голосов
/ 19 января 2011

У меня есть требование найти и извлечь число, содержащееся в строке.

Например, из этих строк:

string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"

Как я могу это сделать?

Ответы [ 28 ]

1 голос
/ 18 января 2014

вот мое решение

string var = "Hello345wor705Ld";
string alpha = string.Empty;
string numer = string.Empty;
foreach (char str in var)
{
    if (char.IsDigit(str))
        numer += str.ToString();
    else
        alpha += str.ToString();
}
Console.WriteLine("String is: " + alpha);
Console.WriteLine("Numeric character is: " + numer);
Console.Read();
1 голос
/ 27 февраля 2013
  string verificationCode ="dmdsnjds5344gfgk65585";
            string code = "";
            Regex r1 = new Regex("\\d+");
          Match m1 = r1.Match(verificationCode);
           while (m1.Success)
            {
                code += m1.Value;
                m1 = m1.NextMatch();
            }
0 голосов
/ 26 декабря 2014

На основе последнего образца я создал метод:

    private string GetNumberFromString(string sLongString, int iLimitNumbers)
    {
        string sReturn = "NA";
        int iNumbersCounter = 0;
        int iCharCounter = 0; 

        string sAlphaChars = string.Empty;
        string sNumbers = string.Empty;
        foreach (char str in sLongString)
        {
            if (char.IsDigit(str))
            {
                sNumbers += str.ToString();
                iNumbersCounter++;
                if (iNumbersCounter == iLimitNumbers)
                {
                    return sReturn = sNumbers;
                }
            }
            else
            {
                sAlphaChars += str.ToString();
                iCharCounter++;
                // reset the counter 
                iNumbersCounter = 0; 
            }
        }
        return sReturn;
    }
0 голосов
/ 19 января 2011

Вы должны будете использовать Regex, так как \d+

\d соответствует цифрам в данной строке.

0 голосов
/ 19 января 2016
string s = "kg g L000145.50\r\n";
        char theCharacter = '.';
        var getNumbers = (from t in s
                          where char.IsDigit(t) || t.Equals(theCharacter)
                          select t).ToArray();
        var _str = string.Empty;
        foreach (var item in getNumbers)
        {
            _str += item.ToString();
        }
        double _dou = Convert.ToDouble(_str);
        MessageBox.Show(_dou.ToString("#,##0.00"));
0 голосов
/ 11 октября 2018

Вот мой алгоритм

    //Fast, C Language friendly
    public static int GetNumber(string Text)
    {
        int val = 0;
        for(int i = 0; i < Text.Length; i++)
        {
            char c = Text[i];
            if (c >= '0' && c <= '9')
            {
                val *= 10;
                //(ASCII code reference)
                val += c - 48;
            }
        }
        return val;
    }
0 голосов
/ 19 февраля 2019

Используя @ tim-pietzcker ответ сверху , следующее будет работать для PowerShell.

PS C:\> $str = '1 test'
PS C:\> [regex]::match($str,'\d+').value
1
0 голосов
/ 13 января 2013
static string GetdigitFromString(string str)
    {
        char[] refArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        char[] inputArray = str.ToCharArray();
        string ext = string.Empty;
        foreach (char item in inputArray)
        {
            if (refArray.Contains(item))
            {
                ext += item.ToString();
            }
        }
        return ext;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...