2012-02-03 60 views
6

Tôi nhận được mã này dưới đây hoạt động cho các dấu nháy đơn. nó tìm tất cả các từ giữa các dấu nháy đơn. nhưng làm cách nào tôi sửa đổi regex để làm việc với dấu ngoặc kép?Regex.Matches C# double quotes

từ khóa đến từ một bài mẫu

nên

keywords = 'peace "this world" would be "and then" some' 


    // Match all quoted fields 
    MatchCollection col = Regex.Matches(keywords, @"'(.*?)'"); 

    // Copy groups to a string[] array 
    string[] fields = new string[col.Count]; 
    for (int i = 0; i < fields.Length; i++) 
    { 
     fields[i] = col[i].Groups[1].Value; // (Index 1 is the first group) 
    }// Match all quoted fields 
    MatchCollection col = Regex.Matches(keywords, @"'(.*?)'"); 

    // Copy groups to a string[] array 
    string[] fields = new string[col.Count]; 
    for (int i = 0; i < fields.Length; i++) 
    { 
     fields[i] = col[i].Groups[1].Value; // (Index 1 is the first group) 
    } 
+0

Nó sẽ không làm việc để đưa các dấu ngoặc kép trong chuỗi? @ -strings sử dụng "" thay vì \ "cho dấu ngoặc kép.' @ "" "(. *?)" "" ' –

Trả lời

13

Bạn chỉ đơn giản là sẽ thay thế ' với \" và loại bỏ các literal để tái tạo lại nó đúng cách.

MatchCollection col = Regex.Matches(keywords, "\\\"(.*?)\\\""); 
+0

Không cần phải thoát khỏi' "' trong regex. –

+0

trưởng. và nếu tôi muốn bao gồm các dấu ngoặc kép trong chuỗi? – user713813

+0

@ user713813: Di chuyển dấu ngoặc đơn (cũng như dấu _nongreedy_) đến các đầu tương ứng của chuỗi. – Nuffin

8

Chính xác như vậy, nhưng với dấu ngoặc kép thay cho dấu nháy đơn. Dấu ngoặc kép không đặc biệt trong mẫu regex. Nhưng tôi thường thêm cái gì đó để chắc chắn rằng tôi sẽ không kéo dài trên nhiều chuỗi trích dẫn trong một trận đấu duy nhất, và để chứa dấu nháy kép đôi thoát:

string pattern = @"""([^""]|"""")*"""; 
// or (same thing): 
string pattern = "\"(^\"|\"\")*\""; 

nào dịch cho chuỗi chữ

"(^"|"")*" 
3

Sử dụng regex này:

"(.*?)" 

hoặc

"([^"]*)" 

Trong C#:

var pattern = "\"(.*?)\""; 

hoặc

var pattern = "\"([^\"]*)\""; 
2

Bạn có muốn để phù hợp với " hoặc '?

trong trường hợp này bạn có thể muốn làm một cái gì đó như thế này:

[Test] 
public void Test() 
{ 
    string input = "peace \"this world\" would be 'and then' some"; 
    MatchCollection matches = Regex.Matches(input, @"(?<=([\'\""])).*?(?=\1)"); 
    Assert.AreEqual("this world", matches[0].Value); 
    Assert.AreEqual("and then", matches[1].Value); 
}