2009-01-14 9 views
6

w AS3 masz funkcję na sznurku z tym podpisem:C# Wymień funkcja zwrotna jak w AS3

function replace(pattern:*, repl:Object):String 

repl: Przedmiot może również określić funkcję. Jeśli określisz funkcję, łańcuch zwracany przez funkcję zostanie wstawiony w miejsce pasującej treści.

Co więcej, czy można uzyskać oryginalny ciąg znaków, w którym chcę zamienić elementy?

(w AS3 można uzyskać oryginalny łańcuch przez

var input:String = arguments[2]; //in the callback function 

)

nie widzę właściwość w klasie Match zawierającego oryginalny łańcuch ...

Odpowiedz

6

W celu Aby to zrobić w języku C#, użyj System.Text.RegularExpressions.Regex.Replace(), który oddzwoni.

12
static void Main() { 

    string s1 = Regex.Replace("abcdefghik", "e", 
     match => "*I'm a callback*"); 

    string s2 = Regex.Replace("abcdefghik", "c", Callback); 
} 
static string Callback(Match match) { 
    return "*and so am i*"; 
} 

Uwaga masz dostęp do danych za pośrednictwem dopasowanych argumentu (i match.Value w szczególności, jeżeli nie chcesz otrzymać dostęp do regex grupach (.Groups) itp).

+0

Czy można uzyskać oryginalny ciąg, w którym chcę zastąpić rzeczy? (w AS3 można uzyskać oryginalny łańcuch przez wejściu var: String = argumenty [2]; // w funkcji zwrotnej ) nie widzę właściwość w klasie Mach zawierającego oryginalny łańcuch ... –

5

Tylko jako przykład w celu dostosowania istniejącego odpowiedzi absolutnie beton, i pokazując, jak wyrażenia lambda może być przydatny:

using System; 
using System.Text.RegularExpressions; 

class Test 
{ 
    static void Main() 
    { 
     var template = "On $today$ you need to do something."; 
     var regex = new Regex(@"\$today\$"); 
     var text = regex.Replace(template, 
      match => DateTime.Now.ToString("d")); 
     Console.WriteLine(text); 
    } 
} 

(odpowiedź Marca pojawił podczas pisania, ale zostawię go jako kompletny przykład, chyba że ktokolwiek myśli, że jest to po prostu zbędne, z przyjemnością go usunę, jeśli zasugeruję.)

+0

Dziękuję Jon, to było naprawdę pomocne dla mnie. – mack