我有List<string>
一些话。我想获得所有元素,女巫在这个模式中包含字母:
a00b0c000d
-0
是随机字符,a,b,c,d
- 是字符串中的不断字符。
我怎样才能做到这一点?我可以只使用正则表达式吗?没有其他解决办法吗?
好吧,您可以使用 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();
好吧,你可以用 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);
您可以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
}
}
一种有效的方法是遍历列表。
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();
如果不使用正则表达式,您可能会做一些类似的事情
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;
}
为了得到你所追求的结果。我没有分析这段代码,所以据我所知,它可能比使用正则表达式慢很多,但它应该给你一种完全避免正则表达式的方法(这是我通常倾向于做的事情)。