2012-04-09 12 views
18
string input = "Hello World!"; 
string pattern = "(World|Universe)"; 
string replacement = "$1"; 

string result = Regex.Replace(input, pattern, replacement); 

Avere il seguente esempio, il risultato sarebbe "Hello World!", come il $1 viene sostituito con il primo gruppo (World|Universe), tuttavia il risultato che voglio è "Hello $1!"gestione del testo espressione regolare sostituzione di fuga che contiene il carattere dollaro

Il Il metodo Regex.Escape deve essere utilizzato per evitare un modello Regex, non la sostituzione, in quanto può sfuggire ad altri caratteri come le barre e altri caratteri del modello Regex. L'ovvia soluzione al mio problema è di avere la mia sostituzione uguale a "$$1", e raggiungerò "Hello $1!", ma mi chiedevo se il simbolo del dollaro è l'unico valore che devo sfuggire (supponendo che lo replacement sia generato dall'utente e non lo conosco più avanti di tempo), o c'è una funzione di supporto che lo fa già.

Qualcuno sa di una funzione per sfuggire al valore di sostituzione utilizzato da Regex.Replace(string input, string pattern, string replacement)?

risposta

16

Da MSDN:

Il sostituzione parametro specifica la stringa che deve sostituire ogni coppia nel ingresso. sostituzione può essere costituito da qualsiasi combinazione di testo letterale e substitutions.

le seguenti sostituzioni: are defined

  • $ numero
  • $ {nome}
  • $$
  • $ &
  • $ `
  • $'
  • $ +
  • $ _

Sostituzioni sono gli unici costrutti speciali rilevate in un criterio di sostituzione. Nessuno degli altri elementi del linguaggio delle espressioni regolari, inclusi i caratteri escape e il punto (.), Che corrisponde a qualsiasi carattere, sono supportati. Allo stesso modo, gli elementi del linguaggio di sostituzione sono riconosciuti solo nei modelli di sostituzione e non sono mai validi nei modelli di espressioni regolari.

Quindi sembra che sia solo il carattere $ che deve essere sfuggito.

+1

Anche da MSDN: le sostituzioni sono gli unici elementi di linguaggio di espressioni regolari riconosciuti in un modello di sostituzione. Tutti gli altri elementi del linguaggio delle espressioni regolari, inclusi i caratteri di escape, sono consentiti solo nei modelli di espressioni regolari e non sono riconosciuti nei modelli di sostituzione. – Gebb

+0

Questo sembra abbastanza buono per me, ho il sospetto di fare un muto ol '' replacement.Replace ("$", "$$") 'dovrebbe essere buono il 100% delle volte allora? – Matthew

+7

Sì, 'replacement.Replace (" $ "," $$ ")' dovrebbe essere tutto ciò che serve. – dtb

Problemi correlati