2015-04-29 6 views
1

у меня есть значение, как показано нижеПолучить не числовые значения из значения строки с #

string value = "11,.Ad23"; 
int n; 
bool isNumeric = int.TryParse(value, out n); 

Я контролирую, если строка является числовой или not.If строка не является числовой значением и имеет нечисловой я должен получить не числовые значения как показано ниже

Результат должен быть, как показано ниже

,.Ad 

Как я могу сделать это в C#?

+0

Что делать, если числовые части строки не являются последовательными, как 'ABC123DEF'. Вы хотите получить «ABCDEF» в этом случае? – juharr

ответ

8

Если это не имеет значения, если не-цифры подряд, это просто:

string nonNumericValue = string.Concat(value.Where(c => !Char.IsDigit(c))); 

Интернет Демо: http://ideone.com/croMht

Если вы используете .NET 3.5. как уже упоминалось в комментариях не было перегрузки String.Concat (или String.Join как в Dmytris answer), который принимает IEnumerable<string>, так что вам нужно создать массив:

string nonNumericValue = string.Concat(value.Where(c => !Char.IsDigit(c)).ToArray()); 

Это занимает все не-цифр. Если вместо этого вы хотите взять среднюю часть, поэтому пропустите цифры, а затем принять все до следующих цифр:

string nonNumericValue = string.Concat(value.SkipWhile(Char.IsDigit) 
              .TakeWhile(c => !Char.IsDigit(c))); 
2

Регулярное выражение раствор (склеить все нечисловых значений):

String source = "11,.Ad23"; 
    String result = String.Join("", Regex 
    .Matches(source, @"\D{1}") 
    .OfType<Match>() 
    .Select(item => item.Value)); 

Edit: мне кажется, что вы используете, и старая версия .Net, в этом случае вы можете использовать простой код без RegEx, Linq и т.д.:

String source = "11,.Ad23"; 

    StringBuilder sb = new StringBuilder(source.Length); 

    foreach (Char ch in source) 
    if (!Char.IsDigit(ch)) 
     sb.Append(ch); 

    String result = sb.ToString(); 
+0

Почему не 'string.Concat()'? – fubo

+0

Я скопирую и вставляю код в .net paltform, и он отображает ошибку как «наилучшее перегруженное соответствие метода для« string.Join (string, string []) »имеет некоторые недопустимые аргументы» – Richard

+0

@fubo: часто (при * склеивании вместе *) нам нужен разделитель, скажем «перечислить все нечисловые символы, разделяющие их запятой», поэтому я поставил 'Join'. Ничего плохого в 'String.Concat()' это ИМХО вопрос вкуса. –

1

Хотя я, как решение предложил я думаю, что более ЭФФЕКТИВНЫЙ способ будет использовать регулярные выражения, такие как

[^\D]

Что называется, как

var regex = new Regex(@"[^\D]"); 
var nonNumeric = regex.Replace("11,.Ad23", "")); 

который возвращает:

,.Ad

1

Будет ли решение LINQ работать для вас?

string value = "11,.Ad23"; 
var result = new string(value.Where(x => !char.IsDigit(x)).ToArray()); 
Смежные вопросы