我试图从更长的字符串列表中获得完全匹配,这是到目前为止的代码:
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var stringToCheck = "fooX, fooY);";
List<string> allStrings = new List<string>{
"fooX",
"foo",
"fooY"
};
var matches = allStrings.Where(cmd => stringToCheck.IndexOf(cmd) > -1).ToList();
//expected output is 2
Console.Write(matches.Count);
}
}
目前我正在匹配所有3个字符串,我的问题是如何匹配2个完全匹配的字符串
对于上下文,要检查的字符串的值是类文件的字符串表示形式。
看来,您正在寻找整个单词匹配的地方;即"foo"
不匹配 "fooX, fooY);"
,因为我们fooX
和fooY
整个单词而已。
如果是您的情况,可以使用正则表达式:
using System.Text.RegularExpressions;
...
var matches = allStrings
.Where(cmd => Regex.IsMatch(stringToCheck, $@"\b{Regex.Escape(cmd)}\b"))
.ToList();
编辑:如果allStrings
和stringToCheck
是长的所有项目allStrings
都保证只包含a到z的字母,你可以尝试更快的解决方案-拆分stringToCheck
成words
:
HashSet<string> words = new HashSet<string>(Regex.Split(stringToCheck, @"\W"));
然后检查这些预先计算的words
:
var matches = allStrings
.Where(cmd => words.Contains(cmd))
.ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句