6

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

我怎样才能做到这一点?我可以只使用正则表达式吗?没有其他解决办法吗?

4

5 回答 5

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();
于 2013-07-27T10:45:32.593 回答
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);
于 2013-07-27T10:41:12.440 回答
1

您可以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。
于 2013-07-27T10:45:58.243 回答
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();
于 2013-07-27T11:50:18.647 回答
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;
        }

为了得到你所追求的结果。我没有分析这段代码,所以据我所知,它可能比使用正则表达式慢很多,但它应该给你一种完全避免正则表达式的方法(这是我通常倾向于做的事情)。

于 2013-07-27T10:46:12.847 回答