2009-01-14 55 views
6

Trong AS3 bạn có một hàm trên một chuỗi với chữ ký này:C# Replace with Chức năng gọi lại như trong AS3

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

Các repl: Object cũng có thể chỉ định một hàm. Nếu bạn chỉ định một hàm, chuỗi được hàm trả về được chèn vào vị trí của nội dung phù hợp.

Ngoài ra, có thể lấy chuỗi gốc mà tôi muốn thay thế mọi thứ không?

(Trong AS3 bạn có thể nhận được chuỗi ban đầu bằng cách

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

)

Tôi không thấy một tài sản trong lớp Match chứa chuỗi gốc ...

Trả lời

6

Để để thực hiện điều này trong C#, hãy sử dụng System.Text.RegularExpressions.Regex.Replace() để gọi lại.

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*"; 
} 

Lưu ý bạn có quyền truy cập vào các dữ liệu phù hợp thông qua đối số (và match.Value nói riêng, trừ khi bạn muốn truy cập vào các nhóm regex (.Groups) vv).

+0

Có thể lấy chuỗi gốc mà tôi muốn thay thế mọi thứ không? (Trong AS3 bạn có thể nhận được chuỗi ban đầu bằng cách var đầu vào: String = luận [2]; // trong hàm callback ) Tôi không thấy một tài sản trong lớp Mach chứa chuỗi gốc ... –

5

Cũng như một ví dụ để làm cho câu trả lời hiện hoàn toàn bê tông và chỉ ra cách biểu thức lambda có thể được thuận tiện:

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

(câu trả lời của Marc xuất hiện trong khi tôi đang viết những dòng này, nhưng tôi sẽ để lại nó lên như một ví dụ hoàn chỉnh trừ khi có ai đó nghĩ rằng nó chỉ dư thừa. Tôi rất vui khi xóa nó nếu được gợi ý.)

+0

Cảm ơn Jon, điều này thực sự hữu ích với tôi. – mack

Các vấn đề liên quan