我有一个包含一些单词的 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();
你可以使用正则表达式和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;
}
^
和$
,以防列表中包含任何(错误的?)更长的字符串吗? - O. R. Mapper