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

Nes*_*k M 7 .net c# regex string

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

var inputString = "this is just a simple text string";
Run Code Online (Sandbox Code Playgroud)

并说我有这个词:

var word = "ts";
Run Code Online (Sandbox Code Playgroud)

现在它应该挑选出包含的单词ts:

这只是字符串

这就是我正在做的事情:

var names = Regex.Matches(inputString, @"\S+ts\S+",RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)

但这并没有让我回复我喜欢的词.如果我只喜欢这样一个角色t,那么它会给我所有包含的单词t.如果我有,st而不是ts,它会让我回到这个词just.

知道这是如何工作的吗?

Win*_*don 11

这是一个LINQ解决方案,比正则表达式更容易让人眼前一亮.

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

结果是:


只是
字符串


w.b*_*w.b 7

您可以使用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);
Run Code Online (Sandbox Code Playgroud)

输出:

// this
// just
// string
Run Code Online (Sandbox Code Playgroud)


M.k*_*ary 6

您可以使用此模式.

(?=[^ ]*t)(?=[^ ]*s)[^ ]+
Run Code Online (Sandbox Code Playgroud)

你可以动态制作正则表达式.

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);
Run Code Online (Sandbox Code Playgroud)