2012-02-03 23 views
6

Bu kodu aşağıda tek tırnak işaretleri için çalışır aldım. tek tırnaklar arasındaki tüm kelimeleri bulur. ancak ikili tırnaklarla çalışmak için normal ifadeyi nasıl değiştirebilirim?Regex.Matches C# çift tırnak işareti

anahtar öylesine

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

o dizede tırnak koymak için işe misiniz:

bu durumda böyle bir şey yapmak isteyebilirsiniz? @ -strings "" yerine "" yerine "." @ "" "(. *?)" "" ' –

cevap

13

Sadece \" ile ' değiştirip düzgün yeniden literal ortadan kaldıracak bir biçim yazı

geliyor.

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

" regex "in" "işlevinden kurtulmaya gerek yoktur. –

+0

kaymakam. ve alıntıları diziye dahil etmek isteseydim? – user713813

+0

@ user713813: Köşeli parantezleri (yanı sıra _nongreedy_ işareti) dizenin ilgili uçlarına taşıyın. – Nuffin

8

Tam olarak aynı, ancak tek tırnak işaretleri yerine çift tırnak işareti ile. Çift tırnak, normal ifadede özel değildir. Ama genellikle tek bir maçta birden alıntı dizeleri genelinde yayılan değilim emin olmak için bir şey eklemek ve çift çift tırnak karşılamak için kaçar: literal dize

"(^"|"")*" 
3
çevirir

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

"(.*?)" 

veya

"([^"]*)" 
:

bu regex C#

:

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

veya

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

Eğer " veya ' eşleştirmek istiyor musunuz?

[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); 
} 
İlgili konular