【发布时间】:2011-04-01 19:06:29
【问题描述】:
我什至不确定这是否可能,但这就是我想要的。
String: "NS306 FEBRUARY 20078/9/201013B1-9-1Low31 AUGUST 19870"
我有一个文本框,我在其中输入搜索参数,它们以空格分隔。因此,我想返回一个匹配是 string1 在字符串中,然后 string2 在字符串中,或者 string2 在字符串中,然后 string1 在字符串中。我不在乎字符串的顺序,但它们都必须在字符串中(我会超过 2 个)。
例如,在我想要的提供的字符串中:
"FEB Low"
或
"Low FEB"
...作为匹配项返回。
我对正则表达式真的很陌生,只阅读了here 上的一些教程,但那是不久前的事了,我今天需要完成这项工作。星期一我开始了一个更重要的新项目,不能因为这个问题而分心。无论如何要使用正则表达式来做到这一点,还是我必须遍历搜索过滤器的每个部分并排列顺序?非常感谢任何和所有帮助。谢谢。
更新: 我不想遍历循环并寻找最佳性能的原因是不幸的是,我使用的 dataTable 在每次按键时都会调用此函数,我不希望它陷入困境。
更新: 谢谢大家的帮助,非常感谢。
代码更新:
最终,这就是我的选择。
string sSearch = nvc["sSearch"].ToString().Replace(" ", ")(?=.*");
if (sSearch != null && sSearch != "")
{
Regex r = new Regex("^(?=.*" + sSearch + ").*$", RegexOptions.IgnoreCase);
_AdminList = _AdminList.Where<IPB>(
delegate(IPB ipb)
{
//Concatenated all elements of IPB into a string
bool returnValue = r.IsMatch(strTest); //strTest is the concatenated string
return returnValue;
}).ToList<IPB>();
}
}
IPB 类有 X 个元素,并且在我正在处理的整个站点中没有一个表中的列的顺序相同。因此,我需要进行任何订单搜索,并且我不想编写大量代码来完成它。这里还有其他好主意,但我知道我的老板真的很喜欢 Regex(宣扬它们),因此我认为最好现在就这样做。如果由于某种原因该站点的性能下滑(Intranet 站点),那么我将尝试另一种方式。谢谢大家。
【问题讨论】: