[英]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";
現在應該選擇包含t和s的單詞:
這只是字符串
這是我正在從事的工作:
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.