2011-09-11 16 views
6

ho questo:semplice regex sostituire per mantenere stringa originale

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

Dove s è una parola come facebook. Se il titolo è:

How to make a Facebook game 

Vorrei sostituito a:

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

Anche se la parola di ricerca è 'facebook' (nota capitalizzazione). Fondamentalmente, come posso mantenere l'iniziale maiuscola della parola?

Un altro esempio, termine di ricerca FACEBOOK, stringa Hello FaCeBoOk è girato a Hello <span style="background:yellow">FaCeBoOk</span>

risposta

6

È possibile utilizzare il $&substitution per questo:

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); 

L'unica cosa importante è il $+. Contiene l'ultimo testo acquisito. Funzionerà anche per "Come creare un gioco su Facebook, ti ​​piace Facebook?" Il primo Facebook sarà lasciato in maiuscolo, il secondo sarà lasciato in minuscolo.

io aggiungo che se si vuole guardare solo per parole intere, allora si può fare:

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

Questo cercherà solo per le stringhe che si trovano sul confine di parola.

1

È possibile includere semplicemente un gruppo di cattura che corrisponde alla parola "facebook" e includere tale gruppo di cattura come parte della stringa di sostituzione. Questo finirà per includerlo nel risultato finale esattamente come è apparso nell'input.

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.

Problemi correlati