C# сравнение строк по маске
От: alexparser  
Дата: 07.02.11 10:04
Оценка:
Народ, подскажите как можно в C# производить сравнение строк по маске.

Прим. №1
stringSrc = "The is test string"
stringMask = "str?ng"

Прим. №2
stringSrc = "The is test string"
stringMask = "s*g"

Прим. №3
stringSrc = "The is multitest string"
stringMask = "*test*"

Спасибо!
Re: C# сравнение строк по маске
От: Lloyd Россия  
Дата: 07.02.11 10:18
Оценка: +1
Здравствуйте, alexparser, Вы писали:

A>Народ, подскажите как можно в C# производить сравнение строк по маске.


A>Спасибо!


С помощью regex-ов. Если нужен именно такой ситаксис, то можно зареплейсить ?, * на ., .* и использовать regex.
Re[2]: C# сравнение строк по маске
От: alexparser  
Дата: 07.02.11 10:49
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>С помощью regex-ов. Если нужен именно такой ситаксис, то можно зареплейсить ?, * на ., .* и использовать regex.


Синтаксис значения не имеет, если можно пример в моем случае или ссылочку на инфу.

Спасибо!
Re[3]: C# сравнение строк по маске
От: Lloyd Россия  
Дата: 07.02.11 10:53
Оценка:
Здравствуйте, alexparser, Вы писали:

A>Здравствуйте, Lloyd, Вы писали:


L>>С помощью regex-ов. Если нужен именно такой ситаксис, то можно зареплейсить ?, * на ., .* и использовать regex.


A>Синтаксис значения не имеет, если можно пример в моем случае или ссылочку на инфу.


Прим. №1
stringSrc = "The is test string"
stringMask = "str.ng"

Прим. №2
stringSrc = "The is test string"
stringMask = "s.*g"

Прим. №3
stringSrc = "The is multitest string"
stringMask = ".*test.*"

http://msdn.microsoft.com/en-us/library/az24scfc.aspx

A>Спасибо!
Re: C# сравнение строк по маске
От: x64 Россия http://x64blog.name
Дата: 07.02.11 10:59
Оценка:
Если хочется без RegEx-ов, то здесь
Автор: Flamer
Дата: 30.08.02
есть вполне рабочий исходник, но я бы не рекомендовал всё же.
JID: x64j@jabber.ru
Re[4]: C# сравнение строк по маске
От: alexparser  
Дата: 07.02.11 12:02
Оценка:
Здравствуйте, Lloyd, Вы писали:

Спасибо, все супер!
Последний вопрос, как будет выглядить выражение для:
stringSrc = "The is test string"
stringMask = "str.ng"
Re[2]: C# сравнение строк по маске
От: alexparser  
Дата: 07.02.11 12:12
Оценка:
Здравствуйте, x64, Вы писали:

x64>Если хочется без RegEx-ов, то здесь
Автор: Flamer
Дата: 30.08.02
есть вполне рабочий исходник, но я бы не рекомендовал всё же.


А чем плох этот вариант?
Я проверил, шустро лётает и пока без граблей)
Re[3]: C# сравнение строк по маске
От: x64 Россия http://x64blog.name
Дата: 07.02.11 12:17
Оценка: 1 (1) +1 -1
A>А чем плох этот вариант?

Да ни чем, в принципе, просто я считаю, что лучше использовать что-то встроенное, если это возможно, чем что-то, написанное Пупкиным.
JID: x64j@jabber.ru
Re[5]: C# сравнение строк по маске
От: Lloyd Россия  
Дата: 07.02.11 12:32
Оценка:
Здравствуйте, alexparser, Вы писали:

A>Последний вопрос, как будет выглядить выражение для:

A>stringSrc = "The is test string"
A>stringMask = "str.ng"

да
Re[6]: C# сравнение строк по маске
От: alexparser  
Дата: 07.02.11 12:38
Оценка:
Здравствуйте, Lloyd, Вы писали:

Пардоньте, можно пример работы с Regex для моей задачи.

Спасибо!
Re[7]: C# сравнение строк по маске
От: Lloyd Россия  
Дата: 07.02.11 12:40
Оценка:
Здравствуйте, alexparser, Вы писали:

A>Пардоньте, можно пример работы с Regex для моей задачи.


Вбиваешь в гугле "regex class" и будет тебе пример.
Re[7]: C# сравнение строк по маске
От: Аноним  
Дата: 08.02.11 11:31
Оценка:
Здравствуйте, alexparser, Вы писали:

A>Здравствуйте, Lloyd, Вы писали:


A>Пардоньте, можно пример работы с Regex для моей задачи.


A>Спасибо!

Функция перевода маски (как в редакторе Visual Studio — немного расширенные, с [!...], # и еще чем-то) в RegEx:

        public static Regex MaskToRegex(string mask, RegexOptions rx_opt)
        {
            string rx;

            // 1. '.^'   ->   '\.\^'
            rx = Regex.Replace(
                mask
                , @"(?<!\\)([\.\^])"
                , @"\$1"
                , RegexOptions.Singleline
            );

            // 2. '[!...]'   ->   '[^...]'
            rx = Regex.Replace(
                rx
                , @"\[\!([^\]]+?)\]"
                , @"[^$1]"
                , RegexOptions.Singleline
            );

            // 3. '?'   ->   '.{1}'
            rx = Regex.Replace(
                rx
                , @"(?<!\\)\?"
                , @".{1}"
                , RegexOptions.Singleline
            );

            // 4. '*'   ->   '.*'
            rx = Regex.Replace(
                rx
                , @"(?<!\\)\*"
                , @".*?"
                , RegexOptions.Singleline
            );

            // 5. '#'   ->   '[0-9]{1}'
            rx = Regex.Replace(
                rx
                , @"(?<!\\)\#"
                , @"[0-9]{1}"
                , RegexOptions.Singleline
            );

            // 6. '!$+-(),|&'='   ->   '\!\$\+\-\(\)\,\|\&\'\='
            rx = Regex.Replace(
                rx
                , @"(?<!\\)([\!\$\+\-\(\)\,\|\&\'\=])"
                , @"\$1"
                , RegexOptions.Singleline
            );

            // Чтобы regex полностью отвечал поведению масок, длина совпадения должна равняться длине тестируемой строки
            return new Regex(string.Format("^{0}$", rx), rx_opt);
        }
Re[4]: C# сравнение строк по маске
От: Lloyd Россия  
Дата: 08.02.11 11:38
Оценка:
Здравствуйте, x64, Вы писали:

A>>А чем плох этот вариант?


x64>Да ни чем, в принципе, просто я считаю, что лучше использовать что-то встроенное, если это возможно, чем что-то, написанное Пупкиным.


С чем несогласен Undying?
Re: C# сравнение строк по маске
От: _FRED_ Черногория
Дата: 08.02.11 19:38
Оценка:
Здравствуйте, alexparser, Вы писали:

A>Народ, подскажите как можно в C# производить сравнение строк по маске.


A>Прим. №1

A>stringSrc = "The is test string"
A>stringMask = "str?ng"

Интересно, а если делать самому, разве нельзя узнать результат за время, пропорциональное сумме длин строк (проверяемой и маски)?
Help will always be given at Hogwarts to those who ask for it.
Re: C# сравнение строк по маске
От: Sergey Vinogradov Россия  
Дата: 09.02.11 05:54
Оценка:
A>Народ, подскажите как можно в C# производить сравнение строк по маске.

Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.