从列表框正则表达式过滤

时间:2015-06-07 16:25:54

标签: c# regex filter

当我点击过滤器按钮时,我试图根据输入过滤列表框中的数据。

列表中的行采用以下格式:

Id: 1 Leefijd patiënt: 12 Gave blood: yes

所以我的想法是通过循环遍历列表框的每一行。 然后使用正则表达式过滤掉数字。

我正在使用2个正则表达式,因为如果我只过滤数字,我会同时获得ID和年龄(leeftijd)。

所以我的第一个正则表达式过滤掉了leeftijd: 2x digets,第二个正则表达式只删除了文本而只保留了数字。

然后我用if filtertext == final regex做一个if语句,然后将我们当前循环的整个字符串放在一个应用过滤器的新列表中。

但不知怎的,整个事情只是起作用。它可以在没有过滤器的情况下工作,只是迁移它们,但是一旦我尝试过滤它就会中断。

 private void button1_Click(object sender, EventArgs e)
    {


        string filter = txtFiltered.Text;
        int amountOfItemsInList= lstOrgaandonatie.Items.Count;

        for (int i = 0; i < amountOfItemsInList; i++)
         {

           string line= lstOrgaandonatie.Items[i].ToString();
           string firstFilter= Regex.Match(line, "Leefijd patiënt:+ \\d{2}").Value;
           string finalFilter = Regex.Match(firstFilter, "\\d{2}").Value;



            if (finalFilter== filter )
{
    lsttest.Items.Add(line);
}


           }

    }

1 个答案:

答案 0 :(得分:1)

你不需要2个正则表达式。它们可以像这样组合 -

string filter = "12";
string line = "Id: 1 Leefijd patiënt: 12 Gave blood: yes";

Regex rx = new Regex(@"Leefijd[ ]patiënt:[ ]+(\d+)");
Match _m = rx.Match( line );
if (_m.Success && _m.Groups[1].Value == filter)
{
    Console.WriteLine("Add this to listbox {0} ", line );
}