【问题标题】:How to check if a string contains all of the characters of a word如何检查字符串是否包含单词的所有字符
【发布时间】:2016-02-24 16:15:38
【问题描述】:

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

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,它会给我返回单词 just

知道这是如何工作的吗?

【问题讨论】:

    标签: c# .net regex string


    【解决方案1】:

    这是一个 LINQ 解决方案,它比正则表达式更自然。

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

    结果是:

    这个
    只是
    字符串

    【讨论】:

    • 你知道VB中的语法是什么吗? words.Where(Function(w) "ts".All(w.Contains)) 无法编译。 “重载解决失败,因为没有可访问的‘包含’接受这个数量的参数”
    【解决方案2】:

    您可以使用 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
    

    【讨论】:

      【解决方案3】:

      你可以使用这个模式。

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

      【讨论】:

      • 正是我想要的,但是 char[] 不包含 select 的定义
      • @NesquikkM 您使用的是什么版本的 .Net?如果word.Select 不起作用,请尝试word.ToCharArray().Select
      • 好了,由于某种原因它无法正常工作,但重新启动 Visual Studio 后问题就消失了,谢谢
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 2012-05-20
        • 2011-05-20
        相关资源
        最近更新 更多