Я использую MVC3, C #, .net4.0

У меня есть объекты, содержащие строку поиска, с помощью которой я могу искать соответствующие объекты, то есть 4 объекта:

[car:vw:engine:1800]
[car:vw:engine:Diesel 1800]
[car:vw:engine:1600]
[car:ford:engine:1800]

Я хочу найти объекты с двигателем "vw" и "1800".

Я мог бы попробовать Contains ():

SearchString.Contains("vw:engine:1800")

Что вернет только один объект.

Мне нужно что-то вроде:

SearchString.Contains("vw:engine:*1800")

Где * - это подстановочный знак, и он подберет:

[car:vw:engine:1800]
[car:vw:engine:Diesel 1800]

В настоящее время единственный способ обойти это:

SearchString.Contains("vw:engine:1800") or 
SearchString.Contains("vw:engine:Diesel 1800")

Есть ли простой способ сделать это, используя обычную функцию .net, такую ​​как Contains (), если не сам Contains ().

Для меня есть веская причина использовать такую ​​строку поиска, но это не часть вопроса.

0
SamJolly 12 Мар 2014 в 15:53
1
Вы пробовали Regex.IsMatch()?
 – 
Loetn
12 Мар 2014 в 15:56

2 ответа

Лучший ответ

Вы можете использовать регулярные выражения, чтобы проверить, совпадает ли SearchString. .* означает ноль или более любых символов и используется вместо вашего подстановочного знака.

string pattern = @"^\[car:vw:engine:.*1800]$";
bool matches = Regex.IsMatch(SearchString, pattern);
3
Szymon 12 Мар 2014 в 15:58
Спасибо за это. Да, регулярное выражение может быть очень мощным для моих нужд. Я реализую обработчик правил, в котором правила хранятся в БД, и поэтому правилом является «Regex.IsMatch (SearchString, шаблон)». Нужно поиграть с этим, хотя может быть мощным. Из интереса это единственный простой способ добиться этого? Я могу использовать только основные функции в своих сохраненных выражениях, чтобы правило работало. Я использую ФЛИ. Это здорово.
 – 
SamJolly
12 Мар 2014 в 16:04
3
Я почти уверен, что это не единственный способ, но использование регулярных выражений — простой и мощный способ, если используется правильно. Просто не пытайтесь решить каждую проблему с помощью регулярных выражений.
 – 
Szymon
12 Мар 2014 в 16:07
- В каких сценариях, по вашему мнению, использование регулярных выражений для подобных задач было бы плохим выбором?
 – 
user3241191
12 Мар 2014 в 16:25
Прежде всего, не пытайтесь использовать регулярное выражение в HTML или XML, используйте парсер. Лично я не использую регулярное выражение в слишком сложных ситуациях, так как это обычно создает больше проблем.
 – 
Szymon
13 Мар 2014 в 02:44

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

        string car1 = "[car:vw:engine:Diesel 1800]";
        string car2 = "[car:vw:engine:1800]";

        var tokens1 = car1.Substring(1, car1.Length - 2).Split(':');
        var tokens2 = car2.Substring(1, car2.Length - 2).Split(':');

        bool IsMatch1 = tokens1[3].EndsWith("1800");
        bool IsMatch2 = tokens2[3].EndsWith("1800");
1
IliaJ 12 Мар 2014 в 16:39
Хорошо, спасибо за это. Слегка длинноват. Я думаю, что регулярное выражение более подходит.
 – 
SamJolly
13 Мар 2014 в 01:46