2014-02-13 2 views
0

У меня есть общий список, и я бы хотел найти в списке элементы, соответствующие определенному шаблону.Найти шаблон в общем списке

Например, если мой список содержит:

  • стоять
  • Энн
  • стол
  • Стан

и если моя модель является "", то мне нужно выполните поиск по списку для любого элемента, который содержит «an» в тексте, независимо от случая. В этом случае он вернется: стенд, Энн и Стэн.

Это то, что я до сих пор (где TextBox1 содержит образец):

string str = array1.Find(item => item == TextBox1.Text.Trim()); 

if (str != "") 
{ 
    Label3.Text = "List Item Found"; 
} 
else 
{ 
    Label3.Text = "List Item Not Found."; 
} 

Любая помощь приветствуется!

Спасибо!

ответ

1

Вы, вероятно, следует использовать LINQ:

var matches = array1.Where(x => x.Contains(TextBox1.Text.Trim())).ToList(); 

Чтобы сделать это без учета регистра, используйте IndexOf:

var matches = array1.Where(x => x.IndexOf(TextBox1.Text.Trim(), StringComparison.OrdinalIgnoreCase) != -1).ToList(); 
+0

Спасибо! Я посмотрю - работает ли этот метод с разными случаями (т. Е. Верхним или нижним) текста? –

+0

Нет, 'Содержит' чувствителен к регистру. Я обновил свой ответ без учета регистра. – MarcinJuraszek

+0

Большое спасибо ... он говорит, что «локальная переменная x не может быть объявлена», когда я пытаюсь запустить. Я что-то упускаю? –

1
var regex = new RegEx("an", RegexOptions.IgnoreCase); 
var anyMatches = array1.Any(x => regex.IsMatch(x)); 
if(anyMatches) 
{ 
    Label3.Text = "List Item Found"; 
} 
else 
{ 
    Label3.Text = "List Item Not Found"; 
} 
+0

в зависимости от размера, который вы могли бы хотите использовать Скомпилированный RegEx. – Aron

+0

Большое спасибо @Aron. Я рассмотрю этот метод. Он чувствителен к регистру? –

+1

зависит от вашего регулярного выражения. См. [RegexOptions.IgnoreCase] ​​(http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions%28v=vs.110%29.aspx) – Aron

Смежные вопросы