2012-04-09 24 views
18
string input = "Hello World!"; 
string pattern = "(World|Universe)"; 
string replacement = "$1"; 

string result = Regex.Replace(input, pattern, replacement); 

Có ví dụ sau đây, kết quả sẽ là "Hello World!", như $1 được thay thế bằng nhóm đầu tiên (World|Universe), tuy nhiên kết quả tôi muốn là "Hello $1!"Xử lý văn bản regex thay thế thoát có chứa nhân vật đô la

Các Phương pháp Regex.Escape có nghĩa là được sử dụng để thoát khỏi mẫu Regex, chứ không phải thay thế, vì nó có thể thoát khỏi các ký tự khác như dấu gạch chéo và các ký tự mẫu Regex khác. Việc sửa lỗi rõ ràng cho vấn đề của tôi là thay thế bằng "$$1" và sẽ đạt được "Hello $1!", nhưng tôi tự hỏi liệu ký hiệu đô la có phải là giá trị duy nhất tôi phải thoát hay không (giả sử replacement là người dùng được tạo và tôi không biết trước thời gian), hoặc là có một hàm trợ giúp thực hiện điều này.

Có ai biết chức năng để thoát khỏi giá trị thay thế mà Regex.Replace(string input, string pattern, string replacement) sử dụng không?

Trả lời

16

Từ MSDN:

Các thay tham số xác định chuỗi đó là để thay thế mỗi trận đấu trong đầu vào. thay thế có thể bao gồm bất kỳ kết hợp văn bản chữ và substitutions.

Các thay sau are defined:

  • $ number
  • $ {name}
  • $$
  • $ &
  • $ '
  • $'
  • $ +
  • $ _

Substitutions là các cấu trúc đặc biệt chỉ được công nhận trong một mô hình thay thế. Không có phần tử ngôn ngữ biểu thức chính quy nào khác, bao gồm cả ký tự thoát và dấu chấm (.), Khớp với bất kỳ ký tự nào, được hỗ trợ. Tương tự, các phần tử ngôn ngữ thay thế chỉ được nhận dạng trong các mẫu thay thế và không bao giờ hợp lệ trong các mẫu biểu thức chính quy.

Vì vậy, có vẻ như chỉ có $ ký tự cần được thoát.

+1

Cũng từ MSDN: Thay thế là các phần tử ngôn ngữ biểu thức chính quy duy nhất được nhận dạng trong mẫu thay thế. Tất cả các yếu tố ngôn ngữ biểu thức chính quy khác, kể cả thoát ký tự, chỉ được phép trong các mẫu biểu thức chính quy và không được nhận dạng trong các mẫu thay thế. – Gebb

+0

Điều này có vẻ đủ tốt cho tôi, tôi nghi ngờ làm một câm ol ''replace.Replace (" $ "," $$ ")' nên được tốt 100% thời gian sau đó? – Matthew

+7

Có, 'replace.Replace (" $ "," $$ ")' nên là tất cả những gì bạn cần. – dtb

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