我有List<string>
一些话。
我想获得所有元素,女巫包含此模式中的字母:
a00b0c000d
- 0
是随机字符,a,b,c,d
- 在字符串中经常是字符。
我该怎么做?我只能用Regex做到这一点吗?没有其他解决方案吗?
答案 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
}
}
答案 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;
}
获得您追求的结果。我没有对这段代码进行分析,因此它可能比我所知道的使用正则表达式慢得多,但它应该为你提供一种完全避免正则表达式的方法(这是我通常会做的事情)。