2011-05-30 7 views
15

Esto es lo que estoy pasando. Tengo un rastreador que lee html, y estoy buscando saber cuándo no contiene dos cadenas. Por ejemplo.Cadena C# no contiene posibles?

string firstString = "pineapple" 
string secondString = "mango" 

string compareString = "The wheels on the bus go round and round" 

Así que, básicamente quiero saber cuando la primera cadena y la segunda cadena no están en el CompareString.

¡Gracias por toda la ayuda!

Respuesta

7

Usted debe poner todas sus palabras en una especie de colección o la lista y luego llamarlo así:

var searchFor = new List<string>(); 
searchFor.Add("pineapple"); 
searchFor.Add("mango"); 

bool containsAnySearchString = searchFor.Any(word => compareString.Contains(word)); 

Si tiene que hacer un caso o la cultura de búsqueda independiente que debe llamar así esto:

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

Esto es excesivo. La respuesta que menciona "utilizar el cortocircuito" es correcta y simple. –

+0

@ ScottShaw-Smith: si solo tiene dos palabras, tal vez. Si va a buscar más palabras o desea cambiar las palabras, este enfoque tiene más sentido. – Oliver

4
bool isFirst = compareString.Contains(firstString); 
bool isSecond = compareString.Contains(secondString); 
48

Esto debería hacer el truco para usted.

para una palabra:

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

Durante dos palabras:

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

¡Solo está revisando una cadena, mientras que él pidió ambas! – Younes

+6

¿no es trivial extraer la información de esa declaración? – Woot4Moo

+0

esto parece ser la mejor respuesta +1 – Blake

9

Así que usted puede utilizar cortocircuitos:

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

Uso Enumerable.Contains función:

var result = 
    !(compareString.Contains(firstString) || compareString.Contains(secondString)); 
+0

creo que es incorrecto. la primera condición es falsa, y la segunda condición es verdadera. falso + verdadero = verdadero – Woot4Moo

+0

@Woot: hay una negación global en el frente. Esto solo será cierto si ninguna palabra está en la cadena, que es lo que pidió el OP. – Joe

+0

@ Woot4Moo: Has olvidado el "no" ... –

3

Opción con una expresión regular si desea discriminar entre Mango y Mangosteen.

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

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags si malinterpreté lo que el OP tipeó, le devolveré los puntos :) – Woot4Moo

+1

The question se relaciona con una búsqueda de cadenas arbitrarias, el operador no especifica el análisis html, por lo que la suposición es que el marcado no es un problema (la misma suposición de que cada respuesta) –

+1

puntos dado que me malinterpreté. – Woot4Moo

0
string tempString = "FordMustang"; 

if(tempString.Contains("Ford")==false){} 

Otra forma sencilla.

Cuestiones relacionadas