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

时间:2015-11-22 14:52:42

标签: c# .net regex string

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

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 ,它会让我回到这个词只是

知道如何运作吗?

4 个答案:

答案 0 :(得分:11)

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

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

结果是:

  


  只是
  串

答案 1 :(得分: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);

输出:

// this
// just
// string

答案 2 :(得分:6)

您可以使用此模式。

(?=[^ ]*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);

答案 3 :(得分:3)

没有LINQ和Regex的选项(只是为了好玩):

trait Trait: Sync {}

struct Example;
impl Trait for Example {}

static INSTANCE3: &dyn Trait = &Example;