Что вы пробовали?
static Regex rxNonDigits = new Regex(@"[^\d]+");
public static string StripNonDigits(string s)
{
return rxNonDigits.Replace(s,"") ;
}
Или, вероятно, более эффективный
public static string StripNonDigits(string s)
{
StringBuilder sb = new StrigBuilder(s.Length) ;
foreach (char c in s)
{
if (!char.IsDigit(c)) continue ;
sb.Append(c) ;
}
return sb.ToString() ;
}
Или эквивалент один вкладыш:
public static string StripNonDigits(string s)
{
return new StringBuilder(s.Length)
.Append(s.Where(char.IsDigit).ToArray())
.ToString()
;
}
Или, если вы не заботитесь о цифрах другой культуры и заботитесь только о ASCII десятичных цифр, вы могли бы сэкономить [возможно] дорогой поиск и сделать два сравнения:
public static string StripNonDigits(string s)
{
return new StringBuilder(s.Length)
.Append(s.Where(c => c >= '0' && c <= '9').ToArray())
.ToString()
;
}
Следует отметить, что решения LINQ почти наверняка требуют создания промежуточного массива (то, что не требуется с использованием StringBuilder
. Вы также можете использовать агрегацию LINQ:
s.Where(char.IsDigit).Aggregate(new StringBuilder(s.Length), (sb,c) => sb.Append(c)).ToString()
Существует больше, чем один способ сделать это!
возможно дубликат [Regex для чисел только] (http://stackoverflow.com/questions/273141/regex-for-numbers-only) – Marc
Не совсем дубликат. Другой вопрос касается соответствия строк, состоящих только из чисел. – kiheru
@ user1 - Его не дублирующий вопрос, может быть «похожим». – VVV