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

本文关键字:包含单 字符 是否 字符串 何检查 检查 | 更新日期: 2023-09-27 18:23:47

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

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解决方案,它对眼睛来说很简单,比regex更自然。

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)[^ ]+

您可以动态生成regex。

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);
}