замена строки - C # - PullRequest
       52

замена строки - C #

2 голосов
/ 13 октября 2009

Скажем, у меня есть строка, содержащая числа и другие символы.

Я хочу уменьшить строку только до чисел.

F.e. от 23232-2222-d23231 до 23232222223231

Можно ли это сделать с помощью string.replace ()?

если нет, какой самый простой и короткий путь?

10x!

Ответы [ 12 ]

15 голосов
/ 13 октября 2009

Существует множество возможностей, от регулярных выражений до обработки текста самостоятельно. Я бы пошел на это:

Regex.Replace(input, @"\D+", "")
4 голосов
/ 13 октября 2009

Что ж, вы получите около 874355876234857 ответов с помощью String.Replace и Regex.Replace, поэтому вот решение LINQ:

code = new String((from c in code where Char.IsDigit(c) select c).ToArray());

Или используя методы расширения:

code = new String(code.Where(c => Char.IsDigit(c)).ToArray());
2 голосов
/ 13 октября 2009

Лучший способ - использовать регулярные выражения. Ваш пример будет:

RegEx.Replace("23232-2222-d23231", "\\D+", "");
2 голосов
/ 13 октября 2009

Да, вы можете использовать String.replace, но было бы разумнее использовать регулярные выражения, чтобы вы могли соответствовать гораздо большему количеству критериев с гораздо меньшими усилиями.

1 голос
/ 13 октября 2009

Регулярные выражения в выборке являются самыми простыми и краткими.

Интересно, будет ли внизу быстрее?

            string sample = "23232-2222-d23231";
            StringBuilder resultBuilder = new StringBuilder(sample.Length);
            char c;
            for (int i = 0; i < sample.Length; i++)
            {
                c = sample[i];
                if (c >= '0' && c <= '9')
                {
                    resultBuilder.Append(c);
                }
            }
            Console.WriteLine(resultBuilder.ToString());
            Console.ReadLine();

предположение, что это будет зависеть от нескольких вещей, включая длину строки.

0 голосов
/ 13 октября 2009

Вы можете использовать LINQ:

string allDigits = new String(input.Where(c => Char.IsDigit(c)).ToArray());
0 голосов
/ 13 октября 2009

Попробуйте

string str="23232-2222-d23231";
str=Regex.Replace(str, @"\D+", String.Empty);
0 голосов
/ 13 октября 2009

Вы можете использовать простой метод расширения:

    public static string OnlyDigits(this string s)
    {
        if (s == null)
            throw new ArgumentNullException("null string");

        StringBuilder sb = new StringBuilder(s.Length);
        foreach (var c in s)
        {
            if (char.IsDigit(c))
                sb.Append(c);
        }
        return sb.ToString();
    }
0 голосов
/ 13 октября 2009

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

string str = "sdfsdf99393sdfsd";
str = Regex.Replace(str, @"[a-zA-Z _\-]", "");

Я использовал это, чтобы вернуть только числа в строке.

0 голосов
/ 13 октября 2009

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

Смотрите этот пост Regex только для чисел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...