2012-09-22 50 views
6

Mediante el uso de expresiones regulares cómo puedo extraer todo el texto entre comillas dobles, y todas las palabras que salieron de las cotizaciones en dicha cadena:Las expresiones regulares: extraer todas las palabras de cotizaciones

01AB "SET 001" IN SET "BACK" 09SS 76 "01 IN" SET 

primera expresión regular deben extraer todo el texto comillas dobles dentro como

SET 001 
BACK 
01 IN 

segunda expresión deberían poner extraen todas las otras palabras en la cadena

01AB 
IN 
SET 
09SS 
76 
SET 

Para el primer caso funciona bien ("(.*?)"). ¿Cómo puedo extraer todas las palabras de las comillas?

+0

Marque esta [link] (http://stackoverflow.com/questions/9133220/regex-matches-c-sharp-double-quotes) es casi igual que el suyo – andy

Respuesta

5

Pruebe esta expresión:

(?:^|")([^"]*)(?:$|") 

Los grupos emparejados por que excluirá las comillas, porque están encerrados entre paréntesis no capturar (?: y ). Por supuesto, necesita escapar de las comillas dobles para usar en el código C#.

Si la cadena de destino comienza y/o finaliza en un valor entrecomillado, esta expresión también coincidirá con los grupos vacíos (para la cita inicial y la final).

1

Debe negar el patrón en su primera expresión.

(?! Patrón)

Salida this link.

2

Tal vez usted puede intentar sustituir las palabras entre comillas con la cadena vacía como:

Regex r = new Regex("\".*?\"", RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.Singleline); 
     string p = "01AB \"SET 001\" IN SET \"BACK\" 09SS 76 \"01 IN\" SET"; 

     Console.Write(r.Replace(p, "").Replace(" "," ")); 
4

probar este regex:

\"[^\"]*\" 

Uso Regex.Matches de textos entre comillas dobles, y utilizar Regex.Split para todos los demás palabras:

var strInput = "01AB \"SET 001\" IN SET \"BACK\" 09SS 76 \"01 IN\" SET"; 
var otherWords = Regex.Split(strInput, "\"[^\"]*\""); 
1

Si sugiere que necesita todos los bloques de oración - citada y no una - entonces hay una manera más simple de separar la cadena fuente usando Regex. de Split:

static Regex QuotedTextRegex = new Regex(@"("".*?"")", RegexOptions.IgnoreCase | RegexOptions.Compiled); 

var result = QuotedTextRegex 
       .Split(sourceString) 
       .Select(v => new 
        { 
         value = v, 
         isQuoted = v.Length > 0 && v[0] == '\"' 
        }); 
Cuestiones relacionadas