C#字符串不包含可能

本文关键字:包含可 字符串 | 更新日期: 2023-09-27 17:57:54

我想知道一个字符串何时不包含两个字符串。例如

string firstString = "pineapple"
string secondString = "mango"
string compareString = "The wheels on the bus go round and round"

所以,我想知道第一个字符串和第二个字符串何时不在compareString中。

如何?

C#字符串不包含可能

这应该能帮你。

一个词:

if (!string.Contains("One"))

两个词:

if (!(string.Contains("One") && string.Contains("Two")))

您应该将所有单词放入某种Collection或List中,然后这样调用它:

var searchFor = new List<string>();
searchFor.Add("pineapple");
searchFor.Add("mango");
bool containsAnySearchString = searchFor.Any(word => compareString.Contains(word));

如果你需要进行独立于案例或文化的搜索,你应该这样称呼它:

bool containsAnySearchString = 
   searchFor.Any(word => compareString.IndexOf
     (word, StringComparison.InvariantCultureIgnoreCase >= 0);

因此您可以利用短路:

bool containsBoth = compareString.Contains(firstString) && 
                    compareString.Contains(secondString);

使用可枚举。包含函数:

var result =
    !(compareString.Contains(firstString) || compareString.Contains(secondString));
bool isFirst = compareString.Contains(firstString);
bool isSecond = compareString.Contains(secondString );

如果要区分MangoMangosteen,请使用regexp选项。

var reg = new Regex(@"'b(pineapple|mango)'b", 
                       RegexOptions.IgnoreCase | RegexOptions.Multiline);
   if (!reg.Match(compareString).Success)
      ...

当一个未关联的单词包含另一个单词时,接受的答案和大多数其他答案将出现逻辑故障。例如";"低"中的"strong>";跟随"。这些是单独的单词,.ContainsIndexOf将在这些单词上失败。

字边界

需要说的是,一个单词必须独立,而不是在另一个单词中。处理这种情况的唯一方法是使用正则表达式并提供单词边界'b规则来正确地隔离每个单词。

测试和示例

string first = "name";
var second = "low";
var sentance = "Follow your surname";
  
var ignorableWords = new List<string> { first, second };

以下是从其他答案中挑选出来的两个测试(以显示失败),然后是建议的答案。

// To work, there must be *NO* words that match.
ignorableWords.Any(word => sentance.Contains(word));   // Returns True (wrong)
ignorableWords.Any(word =>                            // Returns True (wrong)
                      sentance.IndexOf(word,
                               StringComparison.InvariantCultureIgnoreCase) >= 0);
// Only one that returns False
ignorableWords.Any(word => 
            Regex.IsMatch(sentance, @$"'b{word}'b", RegexOptions.IgnoreCase));

摘要

.Any(word =>Regex.IsMatch(sentance, @$"'b{word}'b", RegexOptions.IgnoreCase)

  • 一对多单词对照
  • 无内部字故障
  • 忽略Case