2010-11-08 29 views
48

Necesito una expresión regular que solo encuentre coincidencias donde toda la cadena coincida con mi consulta.¿Cómo puedo unir una cadena completa con una expresión regular?

Por ejemplo, si realizo una búsqueda de películas con el nombre "Octubre Rojo", solo quiero hacer coincidir ese título exacto (sin distinción entre mayúsculas y minúsculas) pero no coincide con títulos como "La Caza del Octubre Rojo". No estoy seguro de saber cómo hacerlo. ¿Nadie sabe?

Gracias!

+1

¿Por qué necesita una expresión regular para algo con lo que un simple 'string.Contains' funcionará? – Oded

+0

La razón por la que necesito usar una expresión regular es que la estoy usando para una búsqueda en MongoDB y necesito que sea insensible a las mayúsculas y minúsculas, lo cual solo se puede hacer con una expresión regular – Micah

+0

¿Por qué no convertir (al vuelo) datos de datos a minúsculas y minúsculas de usuario para buscar? – greenoldman

Respuesta

73

Prueba la siguiente expresión regular:

^Red October$ 

Por defecto , las expresiones regulares son sensibles a mayúsculas y minúsculas El ^ marca el comienzo del texto coincidente y $ al final.

1

Lo siento, pero eso no está claro.

Por lo que he leído, usted quiere hacer una comparación simple de cadenas. No necesitas expresiones regulares para eso.

string myTest = "Red October"; 
bool isMatch = (myTest.ToLower() == "Red October".ToLower()); 
Console.WriteLine(isMatch); 
isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower()); 
+0

La razón por la que necesito usar una expresión regular es que la estoy usando para una búsqueda en MongoDB y necesito que sea insensible a las mayúsculas y minúsculas, lo cual solo se puede hacer con una expresión regular. – Micah

8

necesitará englobar su expresión regular en ^ (inicio de la cadena) y $ (final de la cadena):

^Red October$ 
14

Uso los ^ y $ modificadores para indicar que el patrón de expresión se encuentra en relación con el inicio y el final de la cadena:

Regex.Match("Red October", "^Red October$"); // pass 
Regex.Match("The Hunt for Red October", "^Red October$"); // fail 
23

En general, y con la configuración predeterminada, ^ y $ anclas son una buena manera de asegurando que una expresión regular coincida con una cadena completa.

algunas advertencias, sin embargo:

Si tiene alternancia en su expresión regular, asegúrese de incluir su expresión regular en un grupo sin fines de captura antes de que lo rodea con ^ y $:

^foo|bar$ 

es por supuesto diferente de

^(?:foo|bar)$ 

también, ^ y $ lata asume un significado diferente (inicio/final de línea en lugar del inicio/fin de cadena) si se establecen ciertas opciones. En los editores de texto que admiten expresiones regulares, este suele ser el comportamiento predeterminado. En algunos idiomas, especialmente Ruby, este comportamiento ni siquiera se puede desactivar.

Por tanto, existe otro conjunto de anclajes que están garantizados para solo al inicio/final de la cadena completa:

\A partidos en el inicio de la cadena.

\Z coincide al final de la cadena o antes de un salto de línea final.

\z coincide en el final de la cadena.

Pero no todos los idiomas admiten estos anclajes, especialmente JavaScript.

+2

esta es la respuesta más útil –

2

Sé que esto puede ser un poco tarde para responder a esto, pero tal vez sea útil para otra persona.

manera más simple:

var someString = "..."; 
var someRegex = "..."; 
var match = Regex.Match(someString , someRegex); 
if(match.Success && match.Value.Length == someString.Length){ 
    //pass 
} else { 
    //fail 
} 
0

Coincidencia de la cadena completa se puede hacer con ^ y $ como dijo en respuestas anteriores.

Para que la caja de expresiones regulares sea insensible, puede implementar un truco que involucre clases de caracteres. Un lote de clases de caracteres.

^[Rr][Ee][Dd] [Oo][Cc][Tt][Oo][Bb][Ee][Rr]$ 
-1

Puede hacerlo de esta manera Exemple si yo sólo quiero coger una vez la letra, menos una en una cadena y se puede comprobar con myRegex.IsMatch()

^[^ e] [e] {1} [^ e] $

Cuestiones relacionadas