簡體   English   中英

如何檢查字符串是否包含單詞的所有字符

[英]How to check if a string contains all of the characters of a word

我想檢查一個字符串是否包含給定單詞的所有字符,例如:

var inputString = "this is just a simple text string";

並說我有這個詞:

var word = "ts";

現在應該選擇包含ts的單詞:

這只是字符串

這是我正在從事的工作:

var names = Regex.Matches(inputString, @"\S+ts\S+",RegexOptions.IgnoreCase);

但這並沒有給我回我喜歡的話。 如果我只是喜歡一個像t這樣的字符,它將把包含t的所有單詞還給我。 如果我用st代替ts ,它將給我剛好這個詞。

知道如何工作嗎?

這是一種LINQ解決方案,比正則表達式更自然,對眼睛更容易。

var testString = "this is just a simple text string";
string[] words = testString.Split(' ');
var result = words.Where(w => "ts".All(w.Contains));

結果是:

這個
只是

您可以使用LINQ的Enumerable.All

var input = "this is just a simple text string";
var token = "ts";

var results  = input.Split().Where(str => token.All(c => str.Contains(c))).ToList();

foreach (var res in results)
    Console.WriteLine(res);

輸出:

// this
// just
// string

您可以使用此模式。

(?=[^ ]*t)(?=[^ ]*s)[^ ]+

您可以動態創建正則表達式。

var inputString = "this is just a simple text string";
var word = "ts";

string pattern = "(?=[^ ]*{0})";
string regpattern = string.Join("" , word.Select(x => string.Format(pattern, x))) + "[^ ]+";

var wineNames = Regex.Matches(inputString, regpattern ,RegexOptions.IgnoreCase);

沒有LINQ和Regex的選項(只是為了好玩):

string input = "this is just a simple text string";
char[] chars = { 't', 's' };
var array = input.Split();
List<string> result = new List<string>();
foreach(var word in array)
{
    bool isValid = true;
    foreach (var c in chars)
    {
        if (!word.Contains(c))
        {
            isValid = false;
            break;
        }
    }
    if(isValid) result.Add(word);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM