如何检查字符串是否包含带通配符的子字符串?像abc * xyz

时间:2015-07-18 11:40:45

标签: c#

当我解析文本文件中的行时,我想检查一行是否包含abc*xyz,其中*是通配符。 abc*xyz是用户输入格式。

3 个答案:

答案 0 :(得分:3)

您可以生成Regex并使用它进行匹配

 searchPattern = "abc*xyz";

 inputText = "SomeTextAndabc*xyz";
 public bool Contains(string searchPattern,string inputText)
  {
    string regexText = WildcardToRegex(searchPattern);
    Regex regex = new Regex(regexText , RegexOptions.IgnoreCase);

    if (regex.IsMatch(inputText ))
    {
        return true;
    }
        return false;
 }
public static string WildcardToRegex(string pattern)
{
    return "^" + Regex.Escape(pattern)
                      .Replace(@"\*", ".*")
                      .Replace(@"\?", ".")
               + "$";
}

Here是来源 和Here是一个类似的问题

答案 1 :(得分:1)

如果星号是您希望允许的唯一通配符,则可以用.*?替换所有星号,并使用正则表达式:

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]正则表达式,适合匹配输入。

Demo.

答案 2 :(得分:0)

使用正则表达式

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