Ответ 1
Вам нужно использовать Regex?
return new String(input.Where(Char.IsDigit).ToArray());
Есть ли лучший способ получить строку типа "(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());
Возможно, шаблон регулярного выражения, который может сделать это в одном совпадении? Кажется, я не мог создать этого, чтобы достичь этого.
Вам нужно использовать Regex?
return new String(input.Where(Char.IsDigit).ToArray());
Есть ли у вас что-то против Replace
?
return Regex.Replace(input, @"[^0-9]+", "");
Вы хотите заменить /\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
Просто удалите все не цифры:
var result = Regex.Replace(input, @"\D", "");
В perl (вы можете адаптировать это к С#) просто выполните
$str =~ s/[^0-9]//g;
Я предполагаю, что ваша строка находится в $str. Основная идея состоит в том, чтобы заменить все незнатные цифры на "'(т.е. Пустую строку)
Мне нравится работать с методами расширений всегда, когда я манипулирую нативными объектами, такими как 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" */