2010-07-19 19 views
10

Jeśli mam ciąg znaków jak poniżej ... Jakie jest wyrażenie regularne, aby usunąć (opcjonalne) wiodące i końcowe podwójne cudzysłowy? Dla dodatkowego kredytu, może to również usunąć opcjonalny białą przestrzeń poza cytatami.C# Wyrażenie regularne: Usuń wiodące i końcowe podwójne cudzysłowy (")

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

(dla C# przy użyciu Regex.Replace)

Odpowiedz

3

Zamień ^\s*"?|"?\s*$ z pustym ciągiem

W języku C# regex byłoby:

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 * $ "' nie jest możliwe w języku C#. W słownych ciągach używaj '' "' zamiast '\" 'do cytatów.Nie musisz tworzyć nowej instancji Regex, po prostu użyj Regex.Replace. –

+0

@Yuriy Dzięki, zaktualizowany – Amarghosh

1

Chciałbym użyć metody String.Trim zamiast, ale jeśli chcesz regex, użyj tego:

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

To przesada używać Regex.Replace do tego. Zamiast tego użyj Trim.

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

A jeśli chcesz tylko usunąć spacje, który jest poza cytaty, zachowując wszystkie, które jest w środku:

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

Wiem, że to nie jest zbyt często, ale jeśli twoja wewnętrzna struna zaczyna się lub kończy którymkolwiek z nich, również je przycinasz, na przykład 'Rozmiar 8" 'lub' "Rozmiar 8" "" (jeśli ucieka z podwójnych cytatów) skończy się "Rozmiar 8". – Andrew

9

Poza tym przy użyciu wyrażeń regularnych można po prostu użyć String.Trim() - dużo łatwiejsze do odczytania, rozumieć i utrzymywać.

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

Stworzyłem lekko zmodyfikowaną wersję innego wzoru, który działa całkiem dobrze dla mnie. Mam nadzieję, że pomaga to w rozdzieleniu normalnych parametrów wiersza polecenia i podwójnych zestawów słów, które działają jako pojedynczy parametr.

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

Moje własne zastosowanie: // Zjadaj pierwszy argument (tak jak nazwa pliku C#) argsLine = new Regex ("(\" [^ \ "] * \" | [^ \ "\\ s] +)"). Zamień (argsLine, ""); Korzystanie z podobnego podejścia do regex. :-) – TarmoPikaro

Powiązane problemy