【问题标题】:How to find substring in string with wildcards如何使用通配符在字符串中查找子字符串
【发布时间】:2021-08-27 13:06:24
【问题描述】:

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

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;

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

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

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

【问题讨论】:

  • IndexOf 没有通配符。为此,您需要正则表达式。使用Regex
  • @PanagiotisKanavos 你能给我举个例子吗?我是正则表达式的新手

标签: c# string string-comparison


【解决方案1】:

IndexOf 没有通配符。为此,您需要regular expressions。使用Regex 类,例如:

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

. 匹配任何字符。 \S 匹配任何非空白字符。 \S{2} 正好匹配两个非空格字符。 \s+ 匹配一个或多个空格字符

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 虽然这可行,但实现起来并不容易,因为我必须在循环中执行此操作,并且 17long 变量的值可能会偏离路线。
    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2019-10-01
    • 1970-01-01
    相关资源
    最近更新 更多