Найти и извлечь номер из строки

У меня есть требование найти и извлечь число, содержащееся в строке.

Например, из этих строк:

string test = "1 test" string test1 = " 1 test" string test2 = "test 99" 

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

26 Solutions collect form web for “Найти и извлечь номер из строки”

\d+ – регулярное выражение для целочисленного числа. Так

 //System.Text.RegularExpressions.Regex resultString = Regex.Match(subjectString, @"\d+").Value; 

возвращает строку, содержащую первое вхождение числа в subjectString .

Int32.Parse(resultString) даст вам номер.

Вот как я чищу номера телефонов, чтобы получить только цифры:

 string numericPhone = new String(phone.Where(Char.IsDigit).ToArray()); 

пройдите через строку и используйте Char.IsDigit

 string a = "str123"; string b = string.Empty; int val; for (int i=0; i< a.Length; i++) { if (Char.IsDigit(a[i])) b += a[i]; } if (b.Length>0) val = int.Parse(b); 

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

 Regex re = new Regex(@"\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!"); } 

То, что я использую, чтобы получить номера телефонов без знаков препинания …

 var phone = "(787) 763-6511"; string.Join("", phone.ToCharArray().Where(Char.IsDigit)); // result: 7877636511 

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 (string value in numbers) { if (!string.IsNullOrEmpty(value)) { int i = int.Parse(value); Console.WriteLine("Number: {0}", i); } } 

Вывод:

Номер: 4 Номер: 40 Номер: 30 Номер: 10

Вот версия Linq :

 string s = "123iuow45ss"; var getNumbers = (from t in s where char.IsDigit(t) select t).ToArray(); Console.WriteLine(new string(getNumbers)); 

Вы также можете попробовать это

 string.Join(null,System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]")); 

Просто используйте RegEx для соответствия строке, а затем конвертируйте:

 Match match = Regex.Match(test , @"(\d+)"); if (match.Success) { return int.Parse(match.Groups[1].Value); } 

Еще одно простое решение с использованием Regex. Вам нужно использовать это

 using System.Text.RegularExpressions; 

и код

 string var = "Hello3453232wor705Ld"; string mystr = Regex.Replace(var, @"\d", ""); string mynumber = Regex.Replace(var, @"\D", ""); Console.WriteLine(mystr); Console.WriteLine(mynumber); 

В вопросе явно не указано, что вы просто хотите, чтобы символы от 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 9 if (c >= '0' && c < = '9') digitsOnly += c; } 

Почему вы не хотите использовать Char.IsDigit () - Числа include символы, такие как дроби, индексы, верхние индексы, римские цифры, числители валют, окруженные номера и цифры, специфичные для скрипта.

Для тех, кто хочет десятичное число из строки с регулярным выражением в TWO строке:

 decimal result = 0; decimal.TryParse(Regex.Match(s, @"\d+").Value, out result); 

То же самое относится к float , long и т. Д. …

 var match=Regex.Match(@"a99b",@"\d+"); if(match.Success) { int val; if(int.TryParse(match.Value,out val)) { //val is set } } 

Вот еще один подход Linq который извлекает первое число из строки.

 string input = "123 foo 456"; int result = 0; bool success = int.TryParse(new string(input .SkipWhile(x => !char.IsDigit(x)) .TakeWhile(x => char.IsDigit(x)) .ToArray()), out result); 

Примеры:

 string input = "123 foo 456"; // 123 string input = "foo 456"; // 456 string input = "123 foo"; // 123 

Вы можете сделать это, используя свойство String как показано ниже:

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

который дает только число из строки.

 var outputString = String.Join("", inputString.Where(Char.IsDigit)); 

Получите все числа в строке. Поэтому, если вы используете для экзамена «1 плюс 2», он получит «12».

Метод расширения для получения всех положительных чисел, содержащихся в строке:

  public static List Numbers(this string str) { var nums = new List(); var start = -1; for (int i = 0; i < str.Length; i++) { if (start < 0 && Char.IsDigit(str[i])) { start = i; } else if (start >= 0 && !Char.IsDigit(str[i])) { nums.Add(long.Parse(str.Substring(start, i - start))); start = -1; } } if (start >= 0) nums.Add(long.Parse(str.Substring(start, str.Length - start))); return nums; } 

Если вам нужны отрицательные числа, просто измените этот код, чтобы обрабатывать знак минуса ( - )

Учитывая этот вклад:

 "I was born in 1989, 27 years ago from now (2016)" 

В результате список номеров будет:

 [1989, 27, 2016] 
  string input = "Hello 20, I am 30 and he is 40"; var numbers = Regex.Matches(input, @"\d+").OfType().Select(m => int.Parse(m.Value)).ToArray(); 

Был ли обратный ответ на один из ответов на этот вопрос: Как удалить числа из строки с помощью Regex.Replace?

 // Pull out only the numbers from the string using LINQ var numbersFromString = new String(input.Where(x => x >= '0' && x < = '9').ToArray()); var numericVal = Int32.Parse(numbersFromString); 
  string verificationCode ="dmdsnjds5344gfgk65585"; string code = ""; Regex r1 = new Regex("\\d+"); Match m1 = r1.Match(verificationCode); while (m1.Success) { code += m1.Value; m1 = m1.NextMatch(); } 

вот мое решение

 string var = "Hello345wor705Ld"; string alpha = string.Empty; string numer = string.Empty; foreach (char str in var) { if (char.IsDigit(str)) numer += str.ToString(); else alpha += str.ToString(); } Console.WriteLine("String is: " + alpha); Console.WriteLine("Numeric character is: " + numer); Console.Read(); 

Интересный подход здесь дает Ахмад Магед, использует Regex и stringbuilder для извлечения целых чисел в том порядке, в котором они появляются в строке.

Пример использования Regex.Split, основанный на сообщении Ахмада Магеда, выглядит следующим образом:

 var dateText = "MARCH-14-Tue"; string splitPattern = @"[^\d]"; string[] result = Regex.Split(dateText, splitPattern); var finalresult = string.Join("", result.Where(e => !String.IsNullOrEmpty(e))); int DayDateInt = 0; int.TryParse(finalresult, out DayDateInt); 

Вам нужно будет использовать Regex как \d+

\d соответствует цифрам в данной строке.

 static string GetdigitFromString(string str) { char[] refArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; char[] inputArray = str.ToCharArray(); string ext = string.Empty; foreach (char item in inputArray) { if (refArray.Contains(item)) { ext += item.ToString(); } } return ext; } 
 string s = "kg g L000145.50\r\n"; char theCharacter = '.'; var getNumbers = (from t in s where char.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")); 

На основе последнего образца я создал метод:

  private string GetNumberFromString(string sLongString, int iLimitNumbers) { string sReturn = "NA"; int iNumbersCounter = 0; int iCharCounter = 0; string sAlphaChars = string.Empty; string sNumbers = string.Empty; foreach (char str in sLongString) { if (char.IsDigit(str)) { sNumbers += str.ToString(); iNumbersCounter++; if (iNumbersCounter == iLimitNumbers) { return sReturn = sNumbers; } } else { sAlphaChars += str.ToString(); iCharCounter++; // reset the counter iNumbersCounter = 0; } } return sReturn; } 
  • Разделить строку в Lua?
  • В чем разница между строковой константой и строковым литералом?
  • Как получить согласованное байтовое представление строк в C # без ручного указания кодировки?
  • Swift 3 некорректная строковая интерполяция с неявно развернутыми опциями
  • Это хорошая идея вернуть «const char *» из функции?
  • Нарисуйте строку в JPanel с нажатием кнопки на Java
  • Сравнение строк, нечувствительных к регистру, в C ++
  • Как использовать LINQ Contains (string ) вместо Contains (string)
  • jQuery: количество строк в таблице
  • Как получить значение переменной, если имя переменной хранится как строка?
  • Как настроить ProviderManifestToken для EF Code First
  • Давайте будем гением компьютера.