Подтвердить что ты не робот

Лучший способ получить все цифры из строки

Есть ли лучший способ получить строку типа "(123) 455-2344" и получить от нее "1234552344", чем сделать это:

var matches = Regex.Matches(input, @"[0-9]+", RegexOptions.Compiled);

return String.Join(string.Empty, matches.Cast<Match>()
                                .Select(x => x.Value).ToArray());

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

4b9b3361

Ответ 1

Вам нужно использовать Regex?

return new String(input.Where(Char.IsDigit).ToArray());

Ответ 2

Есть ли у вас что-то против Replace?

return Regex.Replace(input, @"[^0-9]+", "");

Ответ 3

Вы хотите заменить /\D/ (не цифру) на '' (пустая строка)

Regex r = new Regex(@"\D");
string s = Regex.Replace("(123) 455-2344", r, "");

Или более лаконично:

string s = Regex.Replace("(123) 455-2344", @"\D",""); //return only numbers from string

Ответ 4

Просто удалите все не цифры:

var result = Regex.Replace(input, @"\D", "");

Ответ 5

В perl (вы можете адаптировать это к С#) просто выполните

$str =~ s/[^0-9]//g; 

Я предполагаю, что ваша строка находится в $str. Основная идея состоит в том, чтобы заменить все незнатные цифры на "'(т.е. Пустую строку)

Ответ 6

Мне нравится работать с методами расширений всегда, когда я манипулирую нативными объектами, такими как string, int, datetime и т.д.

В этом случае полный класс для метода расширения, который вы можете увидеть ниже:

namespace System
{
  public static class StringExtension
  {

    public static string GetNumbers(this string str)
    {
        if( str != null)
        {
            var justNumbers = new String(str.Where(c => Char.IsDigit(c)).ToArray());
            return justNumbers;
        } //if

        return "";

    } //GetNumbers


    public static string GetLetters(this string str)
    {

        if( str != null)
        {
            var justLetters = new String(str.Where(c => Char.IsLetter(c)).ToArray());
            return justLetters;
        } //if

        return "";

    } //GetLetters

  } //class

} //namespace

Использовать просто:

string myStr = "A0B1C2D3F";
string myStrJustNumbers = myStr.GetNumbers();

/* myStrJustNumbers  = "0123" */