より長い文字列のリストから完全に一致するものを取得しようとしています。これはこれまでの私のコードです。
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]
コメントを追加