2008-09-29 33 views
24

Dường như phương thức .NET Regex.Replace tự động thay thế tất cả các lần xuất hiện phù hợp. Tôi có thể cung cấp một đại biểu MatchEvaluator trả về chuỗi phù hợp sau lần thay thế đầu tiên, không hiển thị thay đổi, nhưng điều đó nghe có vẻ không hiệu quả với tôi.Làm cách nào để Regex tìm kiếm/thay thế lần xuất hiện đầu tiên trong chuỗi trong .NET?

Cách hiệu quả nhất để dừng sau lần thay thế đầu tiên là gì?

Trả lời

27

Từ MSDN:

Replace(String, String, Int32) 

Trong một chuỗi đầu vào quy định, thay thế một số lượng tối đa theo quy định của chuỗi phù hợp với một mô hình biểu hiện thường xuyên với một chuỗi thay thế quy định.

Đây không phải là điều bạn muốn?

25

Chỉ cần để trả lời những câu hỏi ban đầu ... Các regex sau phù hợp với chỉ dụ đầu tiên của foo từ: (?! <)

(?<!foo.*)foo

regex này sử dụng lookbehind tiêu cực để đảm bảo không có trường hợp nào của foo được tìm thấy trước khi kết quả phù hợp.

3

Có thể bạn đang sử dụng phương pháp tĩnh. Không có quá tải (String, String, Int32) cho điều đó. Xây dựng một đối tượng regex đầu tiên và sử dụng myRegex.Replace.

0

Trong trường hợp đó bạn không thể sử dụng:

string str ="abc546_$defg"; 
str = Regex.Replace(str,"[^A-Za-z0-9]", ""); 

Thay vào đó bạn cần phải khai báo Ví dụ Regex mới và sử dụng nó như thế này:

string str ="abc546_$defg"; 
Regex regx = new Regex("[^A-Za-z0-9]"); 
str = regx.Replace(str,"",1) 

Thông báo các , Nó đại diện cho số lần xuất hiện thay thế sẽ xảy ra.

0

Thay vì tạo ra một new Regex bạn cũng có thể làm

Regex.Replace(originalString, "^"+pattern, stringToReplaceWith);

để thay thế xuất hiện đầu tiên.

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