Получить первые числа из строки - PullRequest
19 голосов
/ 31 января 2012

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

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

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

Ответы [ 9 ]

34 голосов
/ 31 января 2012

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

string input = "1567438absdg345";

string digits = new String(input.TakeWhile(Char.IsDigit).ToArray());
19 голосов
/ 31 января 2012

Подход Линка:

string input = "1567438absdg345";
string output = new string(input.TakeWhile(char.IsDigit).ToArray());
8 голосов
/ 31 января 2012

Или регулярное выражение

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

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

7 голосов
/ 31 января 2012

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

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

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

foreach(char c in input)
{
   if(!Char.IsDigit(c))
   {
      break;
   }
   result += c;
}
2 голосов
/ 31 января 2012

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

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

1 голос
/ 09 июля 2019

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

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();
1 голос
/ 31 января 2012

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

string val = "1567438absdg345";

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

string valNum = reg.Match(val).Value;
1 голос
/ 31 января 2012

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

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...