Найти и извлечь число из строки - PullRequest
275 голосов
/ 19 января 2011

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

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

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

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

Ответы [ 28 ]

491 голосов
/ 19 января 2011

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

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

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

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

137 голосов
/ 28 марта 2013

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

string numericPhone = new String(phone.Where(Char.IsDigit).ToArray());
51 голосов
/ 19 января 2011

пройти строку и использовать 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);
37 голосов
/ 19 января 2011

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

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!");
}
27 голосов
/ 16 января 2015

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

var phone = "(787) 763-6511";

string.Join("", phone.ToCharArray().Where(Char.IsDigit));

// result: 7877636511
15 голосов
/ 16 октября 2013

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

15 голосов
/ 13 января 2013

Вот Linq версия:

string s = "123iuow45ss";
var getNumbers = (from t in s
                  where char.IsDigit(t)
                  select t).ToArray();
Console.WriteLine(new string(getNumbers));
12 голосов
/ 19 января 2011

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

string.Join(null,System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));
11 голосов
/ 18 января 2014

Другое простое решение с использованием 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);
10 голосов
/ 19 января 2011

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

Match match = Regex.Match(test , @"(\d+)");
if (match.Success) {
   return int.Parse(match.Groups[1].Value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...