Получить первые числа из String - программирование
Подтвердить что ты не робот

Получить первые числа из String

Как получить первые числа из строки?

Пример: у меня есть "1567438absdg345"

Я хочу только получить "1567438" без "absdg345", я хочу, чтобы он был динамическим, получил первое появление индекса алфавита и удалил все после него.

4b9b3361

Ответ 1

Вы можете использовать методы расширения TakeWhile для получения символов из строки, если они являются цифрами:

string input = "1567438absdg345";

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

Ответ 2

Подход Linq:

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

Ответ 3

Или подход с регулярным выражением

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

^ соответствует началу строки и \d+ следующие цифры

Ответ 4

Вы можете прокручивать строку и проверять, является ли текущий символ числовым с помощью 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
}

Ответ 5

забудьте регулярное выражение, создайте это как вспомогательную функцию где-нибудь...

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

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

Ответ 6

Другой подход

private int GetFirstNum(string inp)
{
    string final = "0"; //if there 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

Ответ 7

Старомодный регулярный экспрессионистский способ:

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.

Ответ 8

Пожалуйста, попробуйте

string val = "1567438absdg345";

System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("[1-9][0-9]*");

string valNum = reg.Match(val).Value;

Ответ 9

Таким образом, вы получите первую цифру из строки.

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