C# 如何检查字符串是否包含带有通配符的子字符串?像abc*xyz
当我分析文本文件中的行时,我想检查一行是否包含C# 如何检查字符串是否包含带有通配符的子字符串?像abc*xyz,c#,C#,当我分析文本文件中的行时,我想检查一行是否包含abc*xyz,其中*是一个通配符abc*xyz是一种用户输入格式。您可以生成Regex并使用它进行匹配 searchPattern = "abc*xyz"; inputText = "SomeTextAndabc*xyz"; 是源头吗 并且是一个类似的问题使用Regex using System; using System.Collections.Generic; using System.Linq; using System.Tex
abc*xyz
,其中*
是一个通配符abc*xyz
是一种用户输入格式。您可以生成Regex
并使用它进行匹配
searchPattern = "abc*xyz";
inputText = "SomeTextAndabc*xyz";
是源头吗 并且是一个类似的问题使用Regex
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string prefix = "abc";
string suffix = "xyz";
string pattern = string.Format("{0}.*{1}", prefix, suffix);
string input = "abc123456789xyz";
bool resutls = Regex.IsMatch(input, pattern);
}
}
}
如果星号是您希望允许的唯一通配符,则可以将所有星号替换为
*?
,并使用正则表达式:
var filter = "[quick*jumps*lazy dog]";
var parts = filter.Split('*').Select(s => Regex.Escape(s)).ToArray();
var regex = string.Join(".*?", parts);
这将生成适合匹配输入的\[quick.*?jumps.*?lazy\dog]
regex
非常酷,祝你好运!请注意,您可以编辑mehod WildcardToRegex来控制输出正则表达式。。。例如,删除用于强制正则表达式从输入开始匹配的“^”,或删除用于执行相同操作的“$”,但对于输入结束,要能够转义通配符本身,可以使用转义拆分,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string prefix = "abc";
string suffix = "xyz";
string pattern = string.Format("{0}.*{1}", prefix, suffix);
string input = "abc123456789xyz";
bool resutls = Regex.IsMatch(input, pattern);
}
}
}
var filter = "[quick*jumps*lazy dog]";
var parts = filter.Split('*').Select(s => Regex.Escape(s)).ToArray();
var regex = string.Join(".*?", parts);