2010-04-14 4 views
18

Есть ли лучший способ получить принимать строку, такие как «(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()); 

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

ответ

63

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

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

+1, хорошая идея. Тем не менее, вы оставили немного лямбда внутри. '.Where (c => Char.IsDigit (c))' –

+0

Не думал о приближении к этому с уровня char. –

+10

@ Энтони Нет, мой синтаксис отлично работает и менее «шумный», чем расширенная версия. –

8

Вы хотите заменить /\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 
18

У вас есть что-то против Replace?

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

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

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

В Perl'е (вы можете приспособить это C#) просто сделать

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

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

Смежные вопросы