2011-05-02 43 views
7

Tôi rất tò mò nếu điều này thậm chí có thể xảy ra với Regex. Tôi muốn trích xuất thẻ từ một chuỗi tương tự như:Trích xuất mã thông báo từ một chuỗi với các cụm từ thông dụng trong .NET

Select a [COLOR] and a [SIZE]. 

Ok, đủ dễ dàng - Tôi có thể sử dụng (\[[A-Z]+\])

Tuy nhiên, tôi muốn cũng để trích xuất văn bản giữa các thẻ. Về cơ bản, tôi muốn các nhóm phù hợp cho các mục trên là:

"Select a " 
"[COLOR]" 
" and a " 
"[SIZE]" 
"." 

Cách tiếp cận tốt nhất cho việc này là gì? Nếu có một cách để làm điều này với RegEx, đó sẽ là tuyệt vời. Nếu không, tôi đoán tôi phải trích xuất các thẻ, sau đó tự vòng lặp thông qua MatchCollection và phân tích các chất nền dựa trên các chỉ mục và độ dài của mỗi Trận đấu. Xin lưu ý rằng tôi cần phải bảo tồn thứ tự của các chuỗi và mã thông báo. Có một thuật toán tốt hơn để làm điều này loại phân tích chuỗi?

Trả lời

11

Sử dụng Regex.Split(s, @"(\[[A-Z]+\])") - nó sẽ cung cấp cho bạn mảng chính xác mà bạn đang theo dõi. Tách các nhóm đã chụp và chuyển đổi chúng thành các thẻ trong mảng kết quả.

+0

Tuyệt vời !! Điều này dễ hơn nhiều so với tôi nghĩ .. –

0

Đây là phương pháp không sử dụng cụm từ thông dụng (Regex) sử dụng String.Split, nhưng bạn mất dấu phân tách.

 string s = "Select a [COLOR] and a [SIZE]."; 

     string[] sParts = s.Split('[', ']'); 

     foreach (string sPart in sParts) 
     { 
      Debug.WriteLine(sPart); 
     } 

     // Select a 
     // COLOR 
     // and a 
     // SIZE 
     // . 
Các vấn đề liên quan