如何检查字符串是否包含单词的所有字符

我希望检查字符串是否包含给定单词的所有字符,例如:

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 result = new List(); 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); }