it-swarm.com.ru

Извлечение чисел из строки для создания строки только из цифр

Мне дали некоторые плохо отформатированные данные, и мне нужно вытащить числа из строк. Я не уверен, что лучший способ сделать это. Числа могут быть любой длины.

string a = "557222]]>";
string b = "5100870<br>";

любая идея, что я могу сделать, так что я получу это:

a = "557222"
b = "5100870"

Спасибо

Решение для C # извините. Отредактировал вопрос, чтобы иметь этот тег

10
kevp

Не достаточно знаком с .NET для точного кода. Тем не менее, два подхода будут:

  • Приведите это как целое число. Если нецифровые символы находятся в конце (т.е. 21389abc), это самый простой способ.
  • Если вы смешали нецифровые символы (т. Е. 1231a23v) и хотите сохранить каждые цифры, используйте регулярное выражение [^\d] для замены нецифровых символов.
8
Jason McCreary

Вы можете написать простой метод для извлечения всех нецифровых символов, хотя это не будет обрабатывать данные с плавающей запятой:

public string ExtractNumber(string original)
{
     return new string(original.Where(c => Char.IsDigit(c)).ToArray());
}

Это просто вытаскивает «цифры» - вы также можете использовать Char.IsNumber вместо Char.IsDigit , в зависимости от желаемого результата.

31
Reed Copsey

попробуйте этот oneliner: Regex.Replace (str, "[^ 0-9 _]", "");

12
Milind Raut

Вы можете использовать простое регулярное выражение:

var numericPart = Regex.Match( a, "\\d+" ).Value;

Если вам нужно, чтобы оно было действительным числовым значением, вы можете использовать int.Parse или int.TryParse.

7
Ethan Brown

Вы могли бы использовать LINQ. Приведенный ниже код фильтрует строку в IEnumerable только с цифрами, а затем преобразует ее в символ []. Затем строковый конструктор может преобразовать char [] в строку:

string a = "557222]]>";
string b = "5100870<br>";

a = new string(a.Where(x => char.IsDigit(x)).ToArray());
b = new string(b.Where(x => char.IsDigit(x)).ToArray());
5
soroxis

В этом вопросе прямо не говорится, что вы просто хотите, чтобы символы от 0 до 9, но было бы не слишком сложно поверить, что это правда из вашего примера и комментариев. Так вот код, который делает это.

        string digitsOnly = String.Empty;
        foreach (char c in s)
        {
            // Do not use IsDigit as it will include more than the characters 0 through to 9
            if (c >= '0' && c <= '9') digitsOnly += c;
        }

Почему вы не хотите использовать Char.IsDigit () - числа включают в себя такие символы, как дроби, нижние индексы, верхние индексы, римские цифры, числительные, окруженные числа и специфичные для скрипта цифры.

3
Atters

Попробуй это

string number = Regex.Match("12345<br>", @"\d+").Value;

Это вернет первую группу цифр. Пример: для ввода "a 123 b 456 c" он вернет "123".

3
Olivier Jacot-Descombes

Вот версия, которая работала для моего случая

    public static string ExtractNumbers(this string source)
    {
        if (String.IsNullOrWhiteSpace(source))
            return string.Empty;
        var number = Regex.Match(source, @"\d+");
        if (number != null)
            return number.Value;
        else
            return string.Empty;
    }
0
Michael Bahig