2011-10-06 28 views
5

Điều này khiến tôi vô cùng bối rối. Tại sao tôi nhận trùng lặp thay thế chuỗi trong đoạn mã sau:.NET Regex Thay thế một dòng khớp với ký tự không xác định

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

này kết quả đầu ra để giao diện điều khiển:

replacereplace 

Tôi hiểu rằng regex được ký tự dòng khớp cuối lạ nhưng không nên có ai sánh kịp. Tôi cũng hiểu rằng các mô hình có thể phù hợp với không có gì, nhưng rõ ràng đầu vào không phải là không có gì. Điều này xảy ra trong Net 3.5 và 4.0 và tôi nhận được điều tương tự với SingleLine và MultiLine.

Tôi biết có một số lựa chọn thay thế sẽ làm những gì tôi mong đợi nhưng tôi tự hỏi nhiều hơn về những gì khác phù hợp. * Nghĩ rằng phát hiện của nó.

Trả lời

4

Lý do bạn nhận được hai thay thế là vì với .* bạn nhận được hai kết quả phù hợp: "test""".

Nếu bạn thay đổi .*-.+ nó sẽ làm việc theo cách bạn mong đợi nó:

String pattern = ".+"; 

Một lựa chọn khác là thêm sự bắt đầu của chuỗi neo:

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

Bạn đã cho tôi trong dòng kết thúc :) – FailedDev

+0

Tôi đồng ý, điều này không khắc phục được nhưng tôi đang tìm kiếm lý do. –

+0

@JoshuaBelden Xem câu trả lời cập nhật. – NullUserException

2

Nó phù hợp với không có gì và sau đó nó phù hợp với tất cả mọi thứ do đó bạn có hai trận đấu và hai thay thế.

+0

Không có gì ngu ngốc. Và tại sao tôi chưa bao giờ gặp phải điều này trước đây. –

+2

@JoshuaBelden có thể bạn đã chạy đến nó nhưng bạn không bao giờ phát hiện ra nó :) – FailedDev

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