2010-07-19 9 views
10

Wenn ich eine Zeichenkette wie unten habe ... Was ist der reguläre Ausdruck, um die (optionalen) führenden und nachfolgenden doppelten Anführungszeichen zu entfernen? Für zusätzlichen Kredit, kann es auch entfernen Sie alle optional Leerraum außerhalb der Zitate.C# Regulärer Ausdruck: Entfernen Sie führende und nachfolgende doppelte Anführungszeichen (")

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

(für C# Regex.Replace)

Antwort

3

ersetzen ^\s*"?|"?\s*$ mit einem leeren String

In C#, würde die regex sein:

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 * $ "' ist in C# nicht möglich. In Verbatim Strings verwenden Sie '' '' anstelle von '\" 'für Anführungszeichen. Auch müssen Sie keine neue Instanz von Regex erstellen, verwenden Sie einfach Regex.Replace. –

+0

@Yuriy Danke, aktualisiert. – Amarghosh

1

würde ich String.Trim Methode stattdessen verwenden, aber wenn Sie regex möchten, verwenden Sie diese:

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

Es Overkill Regex.Replace für diesen Einsatz. Verwenden Sie stattdessen Trim. Und

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

, wenn Sie nur wollen Leerzeichen entfernen, die außerhalb die Anführungszeichen ist, behalten alle, die nach innen ist:

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

Ich weiß, es ist nicht zu Wenn Ihre innere Zeichenkette mit einer dieser Zeichenketten beginnt oder endet, werden Sie sie ebenfalls beschneiden, zB "Größe 8" oder "Größe 8" "" (wenn die doppelten Anführungszeichen weggelassen werden) 'Größe 8'. – Andrew

9

Neben einem regulären Ausdruck verwenden, können Sie nur String.Trim() nutzen - viel einfacher zu lesen, verstehen und pflegen.

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

Ich habe eine leicht modifizierte Version eines anderen Musters erstellt, die ziemlich gut für mich funktioniert. Ich hoffe, dass dies hilft, normale Befehlszeilenparameter und doppelt zitierte Wortsätze zu trennen, die als ein einziger Parameter fungieren.

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

Eigene Verwendung: // Iss erstes Argument (da es C# Dateiname ist) argsLine = new Regex ("(\" [^ \ "] * \" | [^ \ "\\ s] +)"). Ersetzen (argsLine, ""); Verwendung ähnlicher Regex-Ansatz. :-) – TarmoPikaro

Verwandte Themen