当我点击过滤器按钮时,我试图根据输入过滤列表框中的数据。
列表中的行采用以下格式:
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);
}
}
}
答案 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 );
}