我甚至不确定这是否可能,但这就是我想要的.
String: "NS306 FEBRUARY 20078/9/201013B1-9-1Low31 AUGUST 19870"
Run Code Online (Sandbox Code Playgroud)
我有一个文本框,我在其中键入搜索参数,它们是空格分隔的.因此,我想返回一个匹配字符串是string1在字符串中,然后string2在字符串中,或者string2在字符串中,然后string1在字符串中.我不在乎字符串的顺序是什么,但是它们(我将会超过2个)必须在字符串中.
例如,在提供的字符串中我想要:
"FEB Low"
Run Code Online (Sandbox Code Playgroud)
要么
"Low FEB"
Run Code Online (Sandbox Code Playgroud)
......作为比赛返回
我真的是regex的新手,只读了一些关于这里的教程,但那是不久前我需要今天完成这个.星期一我开始了一个更重要的新项目,不能分散这个问题.无论如何使用正则表达式来执行此操作,还是必须遍历搜索过滤器的每个部分并排列顺序?任何和所有的帮助非常感谢.谢谢.
更新:我不想迭代循环并且正在寻找最佳性能的原因是因为不幸的是,我使用的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>();
}
}
Run Code Online (Sandbox Code Playgroud)
IPB类有X个元素,在我所工作的整个站点中没有一个表是相同顺序的列.因此,我需要任何订单搜索,我不想写很多代码来做它.这里还有其他好的想法,但我知道我的老板真的很喜欢Regex(讲道他们),因此我认为如果我现在就这样做是最好的.如果由于某种原因网站的性能下滑(内部网站点),那么我会尝试另一种方式.感谢大家.
pol*_*nts 100
你可以使用(?=…) 积极的前瞻 ; 它断言给定的模式可以匹配.您将锚定在字符串的开头,并以任何顺序逐个查找每个模式的匹配项.
它看起来像这样:
^(?=.*one)(?=.*two)(?=.*three).*$
Run Code Online (Sandbox Code Playgroud)
这将匹配包含字符串"one","two","three",在(任意顺序为上看到rubular.com).
根据上下文,你可能要锚定的\A和\Z,并使用单线模式,点相匹配的一切.
这不是解决问题的最有效方法.最好的解决方案是解析输入中的单词并将其置于有效的集合表示中,等等.
假设我们想要密码:
然后我们可以像这样写一个正则表达式:
^(?=.{8,15}$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*]).*$
\__________/\_________/\_________/\_________/\______________/
length upper lower digit symbol
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24295 次 |
| 最近记录: |