如何检查字符串是否包含单词的所有字符
我希望检查字符串是否包含给定单词的所有字符,例如:
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 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); }