2012-02-03 77 views
6

Tengo este código a continuación que funciona para comillas simples. encuentra todas las palabras entre las comillas simples. , pero ¿cómo modificaría la expresión regular para que funcione con comillas dobles?Regex.Matches C# comillas dobles

palabras clave proviene de un formulario de envío

por lo

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

¿No trabajar para poner las comillas en la cadena? @ -strings usa "" en lugar de \ "para comillas.' @ "" "(. *?)" "" ' –

Respuesta

13

Usted simplemente reemplazar el ' con \" y retire el literal de reconstruir correctamente.

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

No es necesario que escape' "' en expresiones regulares. –

+0

prefecto. y si quería incluir las comillas en la cadena? – user713813

+0

@ user713813: Mueva los corchetes (así como la marca _nongreedy_) a los extremos respectivos de la cadena. – Nuffin

8

Exactamente igual, pero con comillas dobles en lugar de comillas simples. Las comillas dobles no son especiales en un patrón de expresiones regulares. Pero Yo suelo añadir algo para asegurarse de que no estoy al otro lado que abarca múltiples cadenas entre comillas en un solo partido, y para acomodar doble-doble cita de escapes:

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

que se traduce en la cadena literal

"(^"|"")*" 
3

Utilice esta expresión regular:

"(.*?)" 

o

"([^"]*)" 

En C#:

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

o

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

¿Quieres que coincida con " o '?

en cuyo caso es posible que desee hacer algo como esto:

[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); 
} 
Cuestiones relacionadas