2011-09-11 8 views
6

tengo esto:expresiones regulares reemplazo simple para mantener cadena original

Title = Regex.Replace(Title, s, "<span style=\"background:yellow\">" + s + "</span>", RegexOptions.IgnoreCase); 

Dónde s es una palabra como facebook. Si el título es:

How to make a Facebook game 

me gustaría sustituyen a:

How to make a <span style="background:yellow">Facebook</span> game 

Incluso si la palabra de búsqueda es 'facebook' (capitalización nota). Básicamente, ¿cómo retengo la capitalización original de la palabra?

Otro ejemplo, término de búsqueda FACEBOOK, cadena Hello FaCeBoOk se gira a Hello <span style="background:yellow">FaCeBoOk</span>

Respuesta

6

Puede utilizar el $&substitution para ello:

Regex.Replace(Title, s, "<span style=\"background:yellow\">$&</span>", RegexOptions.IgnoreCase) 
1
var input = "How to make a Facebook game, do you like facebook?"; 
var searchFor = "facebook"; 
var result = Regex.Replace(
    input, 
    searchFor, 
    "<span style=\"background:yellow\">$+</span>", 
    RegexOptions.IgnoreCase); 

Lo único importante es la $+. Contiene el último texto adquirido. Esto funcionará incluso para "Cómo hacer un juego de Facebook, ¿te gusta Facebook?" El primer Facebook se dejará en mayúscula, el segundo se dejará en minúscula.

voy a añadir que si desea buscar sólo palabras completas, entonces usted puede hacer:

searchFor = @"\b" + searchFor + @"\b"; 

Esto se verá sólo para las cadenas que están en límite de la palabra.

1

Puede simplemente incluir un grupo de captura que coincida con la palabra "facebook" e incluir ese grupo de captura como parte de la cadena de reemplazo. Esto terminará incluyéndolo en el resultado final exactamente como apareció en la entrada.

var title = "How to make a Facebook game"; 
title = Regex.Replace(title, 
         "(facebook)", 
         "<span style=\"background:yellow\">$1</span>", 
         RegexOptions.IgnoreCase); 

See it in action.

Cuestiones relacionadas