2010-11-09 24 views
6

Tengo el siguiente código. La idea es detectar palabras enteras.Regex y los dos puntos (:)

bool contains = Regex.IsMatch("Hello1 Hello2", @"\bHello\b"); // yields false 
bool contains = Regex.IsMatch("Hello Hello2", @"\bHello\b"); // yields true 
bool contains = Regex.IsMatch("Hello: Hello2", @"\bHello\b"); **// yields true, but should yield false** 

Parece que Regex está ignorando los dos puntos. ¿Cómo puedo modificar el código de modo que la última línea devuelva falso?

+0

¿Has intentado escapar del colon? 'Hello \:' –

+3

@Evan: ':' no es un meta-personaje para regexen. – sepp2k

+2

No hay necesidad de escapar ':' –

Respuesta

11

\b significa "límite de palabras". : no es parte de ninguna palabra, por lo que la expresión es verdadera.

tal vez desea una expresión como la siguiente:

(^|\s)Hello(\s|$) 

Lo que significa: la cadena "Hola", precedido por o bien el inicio de la expresión o un espacio en blanco, y seguido de la final de la expresión o un espacio en blanco.

2

La Regex no está ignorando los dos puntos. La posición antes del colon es donde coincide \b, porque \b coincide con los límites de las palabras. Eso significa la posición entre un carácter de palabra y un carácter de palabra diferente.

Si desea que Whitespace siga la palabra 'Hola', entonces use "\bHello\s".

Cuestiones relacionadas