8

「I have a BIG RED CAR」という文字列があります。

ユーザーが文字列の一部を任意の順序で挿入できるようにしたい。そのため、「CAR BIG RED」と書くと文字列が見つかります。正規表現文字列を使用して複数の IsMatch 呼び出しを実行するか、1 つの文字列を"^(?=.*CAR)(?=.*RED)(?=.*BIG).*$". 何が最善の選択肢なのか、それとももっと良い選択肢があるのか​​ 疑問に思っていましたか?

注: 私は C# を使用しているため、任意の .net 正規表現が機能するはずです。すべての提案を歓迎します。

4

4 に答える 4

4

検索文字列内の単語に対して文字列内の単語をチェックするだけです。

必要に応じて、これにLinqを使用できます

リンク:

List<string> items = new List<string>
{
    "I have a BIG RED CAR",
    "I have a BIG GREEN TRUCK", 
    "I have a BIG YELLOW BOAT"
};

string searchString = "CAR BIG RED";
string result = items.FirstOrDefault(x => searchString.Split(' ').All(s => x.Split(' ').Contains(s)));

正規表現:

を使用RegExすると、個々の単語をすべて連結してパイプで区切られた文字列にし、\b演算子を使用して単語全体をチェックできます。

string sentance = "I have a BIG RED CAR";
string searchString = "CAR BIG RED";

string regexPattern = string.Format(@"\b({0})\b", searchString.Replace(" ","|"));
if (Regex.IsMatch(sentance, regexPattern))
{
    // found all search words in string
}

ただし、RegExでこれを行うより良い方法があるかもしれません.RegExの基本しか知りません

于 2013-05-27T03:31:35.067 に答える
0

LINQ を使用しない単純なアイデア:

var st = "CAR BIG RED".Split(' ');
var sm = "I have a BIG RED CAR";
bool res = true;
foreach (string s in st)
    res &= sm.Contains(s);
于 2013-05-27T04:21:24.363 に答える
0

Array.FindAllメソッドを使用することもできます。リンクの例を参照してください。

于 2013-05-27T05:31:16.597 に答える