@ Томас: Этот код не работает, он приводит к b == "System.Linq.Enumerable..". Правильнее (и даже проще) было быb = String.Join("", a.Where(char.IsDigit))
BlueRaja - Дэнни Пфлюгофт
1
Хорошо, это научит меня не проверять код, который я пишу в комментариях! Вы также можете сделать строку из массива char, используя new string(char[])конструктор.
Томас
1
Regex делает намного лучше.
Джейсон Келли
@BlueRaja - Danny Pflughoeft Почему бы не сделать ваш комментарий правильным ответом, чтобы я мог проголосовать за него :-)
SteveC
ПРИМЕЧАНИЕ. Если строка содержит несколько чисел, этот ответ объединит их все в одно число. Например, «a12bcd345» приводит к «12345». (Что может быть желательным или нет, в зависимости от цели.) Это отличается от решения Regex с наибольшим количеством голосов, которое возвратило бы «12» для случая выше. Это имеет значение для таких случаев, как номера телефонов "555-111-2222".
ToolmakerSteve
546
\d+является регулярным выражением для целого числа. Так
для поддержки отрицательных чисел, которые вы могли бы использовать Regex.Match(subjectString, @"-?\d+").Valueвместо этого
Jon List
45
Этот ответ не является полным (в C #). Это только получение первого числа в строке. Вы должны перебирать совпадения: resultString = string.Join (string.Empty, Regex.Matches (subjectString, @ "\ d +"). OfType <Match> (). Select (m => m.Value));
Маркус
8
@Markus: вопрос гласит : «Мне нужно извлечь номер , содержащийся в строке», и все примеры показывают одно число присутствует в строке. Перебор одного элемента бесполезен.
Тим Пицкер
2
@ayman: О, запятые - это тысячи разделителей? Это потребует гораздо более сложного регулярного выражения - о чем следует поговорить в отдельном вопросе. Отличной отправной точкой является Regular-Expressions.info, который также содержит разделы о движке регулярных выражений .NET.
Тим Пицкер
5
@DavidSopko: О чем ты говоришь? В первоначальном вопросе был задан способ извлечь одно число из строки как в заголовке, так и в теле вопроса. Последующие изменения в вопросе (через год после моего ответа и позже) людьми, отличными от первоначального автора, изменили название на «цифры». Во всяком случае, это неправильное редактирование должно быть отменено.
Тим Питцкер,
181
Вот как я очищаю телефонные номера, чтобы получить только цифры:
очень элегантное решение .. Мне нравится использование linq
Лео Гурдиан
1
Хорошее решение для целых чисел! Имейте в виду, что это не сработает, если вы пытаетесь проанализировать десятичное число, потому что десятичная точка не является цифрой.
Элайджа Лофгрен
40
использовать регулярное выражение ...
Regex re =newRegex(@"\d+");Match m = re.Match("test 66");if(m.Success){Console.WriteLine(string.Format("RegEx found "+ m.Value+" at position "+ m.Index.ToString()));}else{Console.WriteLine("You didn't enter a string containing a number!");}
Regex.Split может извлекать числа из строк. Вы получаете все числа, которые находятся в строке.
string input ="There are 4 numbers in this string: 40, 30, and 10.";// Split on one or more non-digit characters.string[] numbers =Regex.Split(input,@"\D+");foreach(stringvaluein numbers){if(!string.IsNullOrEmpty(value)){int i =int.Parse(value);Console.WriteLine("Number: {0}", i);}}
Это лучший ответ, который дал мне то, что я хотел, это массив из нескольких чисел в строке. Если бы только он мог игнорировать запятые в числах (разделитель тысяч), это было бы прекрасно! :-)
Сагар
9
Вы можете сделать это, используя Stringсвойство, как показано ниже:
В этом вопросе прямо не говорится, что вы просто хотите, чтобы символы от 0 до 9, но было бы не слишком сложно поверить, что это правда из вашего примера и комментариев. Так вот код, который делает это.
string digitsOnly =String.Empty;foreach(char c in s){// Do not use IsDigit as it will include more than the characters 0 through to 9if(c >='0'&& c <='9') digitsOnly += c;}
Почему вы не хотите использовать Char.IsDigit () - числа включают такие символы, как дроби, нижние индексы, верхние индексы, римские цифры, числительные, окруженные числа и специфичные для скрипта цифры.
// Pull out only the numbers from the string using LINQvar numbersFromString =newString(input.Where(x => x >='0'&& x <='9').ToArray());var numericVal =Int32.Parse(numbersFromString);
//Fast, C Language friendlypublicstaticintGetNumber(stringText){int val =0;for(int i =0; i <Text.Length; i++){char c =Text[i];if(c >='0'&& c <='9'){
val *=10;//(ASCII code reference)
val += c -48;}}return val;}
stringvar="Hello345wor705Ld";string alpha =string.Empty;string numer =string.Empty;foreach(char str invar){if(char.IsDigit(str))
numer += str.ToString();else
alpha += str.ToString();}Console.WriteLine("String is: "+ alpha);Console.WriteLine("Numeric character is: "+ numer);Console.Read();
string s ="kg g L000145.50\r\n";char theCharacter ='.';var getNumbers =(from t in s
wherechar.IsDigit(t)|| t.Equals(theCharacter)select t).ToArray();var _str =string.Empty;foreach(var item in getNumbers){
_str += item.ToString();}double _dou =Convert.ToDouble(_str);MessageBox.Show(_dou.ToString("#,##0.00"));
1.5
? Экспоненциальная запись, как1.5E45
?Ответы:
пройти через строку и использовать
Char.IsDigit
источник
b == "System.Linq.Enumerable.."
. Правильнее (и даже проще) было быb = String.Join("", a.Where(char.IsDigit))
new string(char[])
конструктор.\d+
является регулярным выражением для целого числа. Таквозвращает строку, содержащую первое вхождение числа в
subjectString
.Int32.Parse(resultString)
затем даст вам номер.источник
Regex.Match(subjectString, @"-?\d+").Value
вместо этогоВот как я очищаю телефонные номера, чтобы получить только цифры:
источник
string numericPhone =new String(phone.Where(Char.IsDigit).ToArray());
использовать регулярное выражение ...
источник
Что я использую, чтобы получить номера телефонов без каких-либо знаков препинания ...
источник
Regex.Split может извлекать числа из строк. Вы получаете все числа, которые находятся в строке.
Вывод:
источник
Вот
Linq
версия:источник
"123iuow45ss".AsEnumerable().Where(char.IsDigit)
?from t .. select t
избыточность, но в любом случае, ура.Еще одно простое решение с использованием Regex Вам нужно использовать это
и код
источник
Вы также можете попробовать это
источник
Просто используйте RegEx, чтобы соответствовать строке, а затем преобразовать:
источник
Вот еще один
Linq
подход, который извлекает первое число из строки.Примеры:
источник
Для тех, кто хочет десятичное число из строки с Regex в две строки:
То же самое относится и к float , long и т. Д.
источник
источник
Вы можете сделать это, используя
String
свойство, как показано ниже:который дает только число из строки.
источник
источник
В этом вопросе прямо не говорится, что вы просто хотите, чтобы символы от 0 до 9, но было бы не слишком сложно поверить, что это правда из вашего примера и комментариев. Так вот код, который делает это.
Почему вы не хотите использовать Char.IsDigit () - числа включают такие символы, как дроби, нижние индексы, верхние индексы, римские цифры, числительные, окруженные числа и специфичные для скрипта цифры.
источник
Получить все числа в строке. Так что если вы используете для примера «1 плюс 2», он получит «12».
источник
Метод расширения, чтобы получить все положительные числа, содержащиеся в строке:
Если вам нужны и отрицательные числа, просто измените этот код для обработки знака минус (
-
)Учитывая этот вклад:
Результирующий список номеров будет:
источник
если число имеет десятичные точки, вы можете использовать ниже
полученные результаты :
Пример: https://dotnetfiddle.net/IrtqVt
источник
Была ли обратная сторона одного из ответов на этот вопрос: Как удалить числа из строки с помощью Regex.Replace?
источник
источник
Интересный подход предоставлен здесь Ахмадом Магидом, использующим Regex и stringbuilder для извлечения целых чисел в порядке их появления в строке.
Пример использования Regex.Split на основе поста Ахмада Магеда выглядит следующим образом:
источник
Вот мой алгоритм
источник
вот мое решение
источник
Вы должны будете использовать Regex в качестве
\d+
\d
соответствует цифрам в данной строке.источник
источник
источник
Используя ответ @ tim-pietzcker сверху , будет работать следующее
PowerShell
.источник
На основе последнего примера я создал метод:
источник