通过包含字母搜索列表C#

时间:2013-07-27 10:39:19

标签: c# .net

我有List<string>一些话。 我想获得所有元素,女巫包含此模式中的字母: a00b0c000d - 0是随机字符,a,b,c,d - 在字符串中经常是字符。

我该怎么做?我只能用Regex做到这一点吗?没有其他解决方案吗?

5 个答案:

答案 0 :(得分:5)

那么,您可以使用LINQ来检查相应位置中的特定字符,而不是正则表达式。但我绝对更喜欢正则表达式。

var result = yourList
    .Where(x => x[0] == "a")
    .Where(x => x[3] == "b")
    .Where(x => x[5] == "c")
    .Where(x => x[9] == "d")
    .ToList();

答案 1 :(得分:2)

嗯,你可以用Regex和LINQ来做到这一点:

Regex yourRegex = new Regex(@"a..b.c...d"); 
//if you want whole string match use ^a..b.c...d$
var result = yourList.Where(yourRegex.IsMatch);

答案 2 :(得分:1)

在循环遍历List之后,您可以使用IndexOfAny()方法进行字符串。IndexOfAny在字符串中搜索许多值。

 List<string> words = new List<string>();
 foreach(string word in words)
 {
    int match = word.IndexOfAny(new char[] {'a', 'b', 'c', 'd'});
    if(match!=-1)
    {
        //Processing Logic here
    }
  }
  • 它报告此实例中指定的Unicode字符数组中任何字符的第一次出现的索引。
  • 如果在此实例中找不到数组中的字符,则该方法返回-1。

答案 3 :(得分:1)

一种有效的方法是迭代列表。

List<string> matches = new List<string>();
myList.ForEach((x) => { if(x[0] == 'a' && x[3] == 'b' && x[5] == 'c' && x[9] == 'd') matches.Add(x);  });

或者您可以使用LINQ,它可能稍慢但不太可能成为瓶颈。

var matches = myList.Where(x => x[0] == 'a' && x[3] == 'b' && x[5] == 'c' && x[9] == 'd').ToList();

答案 4 :(得分:0)

不使用正则表达式,你可能会按照

的方式做一些事情
        List<string> stromgs = new List<string>();

        foreach (var s in stromgs)
        {
            var sa = s.Select(c => c.ToString(CultureInfo.InvariantCulture)).ToArray();

            if (sa.Contains("a") && sa.Contains("b") && sa.Contains("c") && sa.Contains("d"))
                yield return s;
        }

获得您追求的结果。我没有对这段代码进行分析,因此它可能比我所知道的使用正则表达式慢得多,但它应该为你提供一种完全避免正则表达式的方法(这是我通常会做的事情)。