pha*_*unk 12 c# regex string wildcard
我刚刚开始使用Regular Expressions,这是如此的压倒性,即使阅读文档后,我似乎无法找到从哪里开始帮助解决我的问题.
我需要一堆字符串.
"Project1 - Notepad"
"Project2 - Notepad"
"Project3 - Notepad"
"Untitled - Notepad"
"HeyHo - Notepad"
Run Code Online (Sandbox Code Playgroud)
我有一个包含外卡的字符串.
"* - Notepad"
Run Code Online (Sandbox Code Playgroud)
如果我将这些字符串中的任何一个与包含通配符的字符串进行比较,我将需要它返回true.(有Regex.IsMatch()或类似的......)
我通常不会要求这样的答案,但我找不到我需要的东西.有人可以指出我正确的方向吗?
Nol*_*nar 17
通配符*等同于正则表达式".*"(贪婪)或".*?"(非贪婪),因此您需要执行以下操作string.Replace():
string pattern = Regex.Escape(inputPattern).Replace("\\*", ".*?");
Run Code Online (Sandbox Code Playgroud)
请注意一下Regex.Escape(inputPattern).由于inputPattern可能包含Regex使用的特殊字符,因此您需要正确地转义这些字符.如果你不这样做,你的模式就会爆炸.
Regex.IsMatch(input, ".NET"); // may match ".NET", "aNET", "FNET", "7NET" and many more
Run Code Online (Sandbox Code Playgroud)
结果,通配符*被转义为\\*,这就是为什么我们替换转义的通配符而不仅仅是通配符本身.
你可以这样做:
Regex.IsMatch(input, pattern);
Run Code Online (Sandbox Code Playgroud)
要么
var regex = new Regex(pattern);
regex.IsMatch(input);
Run Code Online (Sandbox Code Playgroud)
不同之处在于模式将尝试匹配多少.
考虑以下字符串:"hello (x+1)(x-1) world".您希望匹配左括号(和右括号)以及中间的任何内容.
贪婪只会匹配"(x+1)(x-1)",没有别的.它基本上匹配它可以匹配的最长子串.
非贪婪会匹配"(x+1)",(x-1)而不是别的.换句话说:最短的子串可能.
我刚刚写了这个(基于验证字符串包含一些确切的单词)
static void Main()
{
string[] inputs =
{
"Project1 - Notepad", // True
"Project2 - Notepad", // True
"HeyHo - Notepad", // True
"Nope - Won't work" // False
};
const string filterParam = "Notepad";
var pattern = string.Format(@"^(?=.*\b - {0}\b).+$", filterParam);
foreach (var input in inputs)
{
Console.WriteLine(Regex.IsMatch(input, pattern));
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35211 次 |
| 最近记录: |