c#包含多个不在一起的单词

c#包含多个不在一起的单词,c#,contains,C#,Contains,此代码检查“Word1”和“Word2”是否同时在字符串中,例如,它们之间没有任何内容,但如何检查字符串是否包含这两个单词,而不考虑它们之间的顺序或任何其他单词 e、 g。 如果字符串为,则返回true if (r.Contains("Word1" + "Word2")) 返回false Word1Word2 您可以使用&&运算符: Word1 Text Word2 注意,这将检查这两个单词是否以任何顺序出现。如果必须确保第一个单词位于第二个单词之前,请获取每个单词的

此代码检查“Word1”和“Word2”是否同时在字符串中,例如,它们之间没有任何内容,但如何检查字符串是否包含这两个单词,而不考虑它们之间的顺序或任何其他单词

e、 g。 如果字符串为,则返回true

   if (r.Contains("Word1" + "Word2"))
返回false

    Word1Word2

您可以使用
&&
运算符:

    Word1 Text Word2
注意,这将检查这两个单词是否以任何顺序出现。如果必须确保第一个单词位于第二个单词之前,请获取每个单词的索引,并检查第一个单词的索引是否低于第二个单词的索引:

if (r.Contains("Word1") &&  r.Contains("Word2"))

只需确认每个单词都包含在
r
中即可

var ind1 = r.IndexOf("Word1");
var ind2 = r.IndexOf("Word2");
if (ind1 >= 0 && ind2 > ind1) {
    ...
}
此代码检查原始字符串中是否存在
“Word1”
“Word2”
,而不管其在字符串中的相对位置如何

编辑:

正如@Alexei Levenkov(+1)在其评论中所指出的,可以使用
IndexOf
方法得出相同的解决方案

if (r.Contains("Word1") && r.Contains("Word2"))

检查每个单词是否包含在字符串中:

if (r.IndexOf("Word1", StringComparison.InvariantCultureIgnoreCase) > -1 
    && r.IndexOf("Word2", StringComparison.InvariantCultureIgnoreCase) > -1))
如果这是您经常做的事情,您可以通过创建扩展方法来提高可读性(IMO)和简洁性:

if (r.Contains("Word1") && r.Contains("Word2")))
用法如下:

public static bool ContainsAll(this string source, params string[] values)
{
    return values.All(x => source.Contains(x));
}

您尝试过正则表达式模式匹配吗?我严重怀疑
r.Contains(“Word1”+“Word2”)
将匹配
Word1 Word2
,因为它将尝试查找
Word1Word2
。是的,我尝试过,但解决方案更简单:)请参见below@SimonBelanger对不起,错了,编辑!那么它就简单了,不需要模式匹配或索引检查以及更多的条件。仅r.包含(“Word1”+“Word2”),但这不会证明Word1文本Word2为false@bjoshiOP说返回
false
是他原来的解决方案的问题。@bjoshi他想要的
Word1文本Word2
true
(我也不太清楚)。我想期望值已经改变了很多次,如果字符串为Word1Word2返回false Word1 Text Word2,则返回true。所以r.Contains(“Word1”+“Word2”)本身将在+1时正常工作。请注意,通常最好使用
IndexOf
,因为您可以指定
IgnoreCase
(不同于
包含
)。
"Word1 Text Word2".ContainsAll("Word1", "Word2") // true