2010-07-19 98 views
10

Si tengo una cadena como la siguiente ... ¿cuál es la expresión regular para eliminar las comillas dobles iniciales y posteriores (opcionales)? Para obtener un crédito adicional, ¿puede también? eliminar cualquier espacio en blanco opcional fuera de las comillas:.C# Expresión regular: elimine las comillas dobles iniciales y finales (")

string input = "\"quoted string\"" -> quoted string 
string inputWithWhiteSpace = " \"quoted string\" " => quoted string 

(para C# usando Regex.Replace)

Respuesta

3

Reemplazar ^\s*"?|"?\s*$ con una cadena vacía

En C#, la expresión regular sería:

string input = " \"quoted string\" "l 
string pattern = @"^\s*""?|""?\s*$"; 
Regex rgx = new Regex(pattern); 
string result = rgx.Replace(input, ""); 
Console.WriteLine(result); 
+0

'@"^\ s * \ "? | \"? \ S * $ "' no es posible en C#. En cadenas verbatim, use '" "' en lugar de '\" 'para las comillas. Tampoco necesita crear una nueva instancia de Regex, solo use Regex.Replace. –

+0

@Yuriy Gracias, actualizado. – Amarghosh

1

me gustaría utilizar el método String.Trim lugar, pero si quieres expresiones regulares, utilizar éste:

@"^(\s|")+|(\s|")+$" 
32

Es una exageración de usar Regex.Replace para esto. Use Trim en su lugar.

string output = input.Trim(' ', '\t', '\n', '\v', '\f', '\r', '"'); 

Y si sólo desea eliminar el espacio en blanco que es fuera las cotizaciones, reteniendo cualquier que hay dentro:

string output = input.Trim().Trim('"'); 
+0

Sé que no es demasiado común, pero si la cadena interna comienza o termina con cualquiera de ellas, también las recortarás. Por ejemplo, 'Tamaño 8 '' o' 'Tamaño 8 '' ''' (si escapa a las comillas dobles) terminará 'Tamaño 8'. – Andrew

9

Además de utilizar una expresión regular que sólo puede utilizar String.Trim() - mucho más fácil de leer, entender y mantener

var result = input.Trim('"', ' ', '\t'); 
1

Creé una versión ligeramente modificada de otro patrón que funciona bastante bien para mí. Espero que esto ayude a separar los parámetros normales de la línea de comandos y los conjuntos de palabras entre comillas dobles que actúan como un solo parámetro.

String pattern = "(\"[^\"]*\"|[^\"\\s]+)(\\s+|$)"; 
+0

Mi propio uso: // Coma el primer argumento (como su nombre de archivo C#) argsLine = new Regex ("(\" [^ \ "] * \" | [^ \ "\\ s] +)"). Reemplazar (argsLine, ""); Usando un enfoque de expresiones regulares similar. :-) – TarmoPikaro

Cuestiones relacionadas