如何使用通配符在字符串中查找子字符串

How to find substring in string with wildcards

我有这样的字符串(可能更长)

string list = "ABCDGGWWWW1234567 ABCDGGWWWW1234568 ABCDGGWWWW1234569 "; 

现在我需要检查子字符串 ABCDGGWWWW1234568 是否在这个字符串中。
我可以像下面那样做

list.IndexOf("ABCDGGWWWW1234568 ") >= 0;

但是,现在我遇到了以下问题,
如果我要查找子字符串 ABCDXXWWWW1234568 那么这也必须导致 true

说明问题,我搜索的时候第5个和第6个字符也可以是XX
换句话说,ABCDGGWWWW1234568 = ABCDXXWWWW1234568

总是两个字符都是 XX 或原始值,而不仅仅是一个。此外,字符串的长度始终为 17 位。而且它们总是大写的。

那么最有效的方法是什么?

我希望我可以使用像

这样的通配符
list.IndexOf("ABCD__WWWW1234568 ") >= 0;
list.IndexOf("ABCD??WWWW1234568 ") >= 0;

但不幸的是这不起作用,它永远找不到索引并且总是 returns -1

编辑
感谢@PanagiotisKanavos,我设法让它像这样工作

chassis = chassis.Substring(0, 4) + @"\S{2}" + chassis.Substring(6, 11) + @"\s+";
bool result = Regex.IsMatch(list, chassis);

IndexOf 没有通配符。你需要regular expressions for this. Use the Regexclass,例如:

var found=Regex.IsMatch(list,"ABCD\S{2}WWWW1234568\s+");

. 匹配任何字符。 \S 匹配任何非白色 space 字符。 \S{2} 恰好匹配两个非 space 字符。 \s+ 匹配一个或多个 whitespace 个字符

试试这个:

            if ("ABCDGGWWWW1234567 ABCDGGWWWW1234568 ABCDGGWWWW1234569".Contains("ABCDGGWWWW1234568") || "ABCDGGWWWW1234567 ABCDGGWWWW1234568 ABCDGGWWWW1234569".Contains("ABCDXXWWWW1234568"))
            {
                var result = true; 
            }