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);