2011-10-06 14 views
5

Questo mi ha estremamente sconcertato. Perché mi appare duplicato sostituzione di stringhe nel codice seguente:. Regex .NET Sostituisci carattere di corrispondenza sconosciuto a linea singola

static void Main(string[] args) 
{ 
    String input = "test"; 
    String pattern = ".*"; 
    String replacement = "replace"; 
    Console.WriteLine(Regex.Replace(input, pattern, replacement)); 
    Console.Read(); 
} 

Emette alla console:

replacereplace 

Capisco che regex ottiene caratteri di fine linea abbinamento strano ma ci dovrebbe essere nessuno. Capisco anche che il modello non può corrispondere a nulla, ma chiaramente l'input non è nulla. Questo accade in .Net 3.5 e 4.0 e ottengo la stessa cosa con SingleLine e MultiLine.

So che ci sono diverse alternative che faranno quello che mi aspetto, ma mi chiedo di più su quale altra corrispondenza. * Pensa alla sua scoperta.

risposta

4

Il motivo per cui si ottengono due sostituzioni è perché con .* si ottengono due corrispondenze: "test" e "".

Se si cambia .*-.+ funzionerà il modo in cui ci si aspetta che:

String pattern = ".+"; 

Un'altra opzione è quella di aggiungere l'inizio di ancoraggio stringa:

String pattern = "^.*"; // I know this looks like a smiley 
+1

Mi hai messo nel traguardo :) – FailedDev

+0

Sono d'accordo, questo lo aggiusta ma stavo cercando il perché. –

+0

@JoshuaBelden Vedi risposta aggiornata. – NullUserException

2

Si accompagna niente e poi corrisponde a tutto quindi si hanno due partite e due sostituisce.

+0

Stupido niente. E perché non mi sono mai imbattuto in questo prima. –

+2

@JoshuaBelden forse l'hai corso ma non l'hai mai scoperto :) – FailedDev

Problemi correlati