2017-08-11 2 views
4

Am Ende eingeschlossen zu bekommen, werde ich möchte die \t alle ersetzen, die innerhalb " eingeschlossen sind, ich bin zur Zeit auf Regex101 verschiedene Iterationen meiner regex versuchen ... Dies ist die nächste, die ich bisher habe ...C# Regex - Der Versuch, die Tab-Zeichen in doppelten Anführungszeichen

originString = blah\t\"blah\tblah\"\t\"blah\"\tblah\tblah\t\"blah\tblah\t\tblah\t\"\t\"\tbleh\" 
regex = \t?+\"{1}[^"]?+([\t])?+[^"]?+\" 
\t?+  maybe one or more tab 
\"{1}  a double quote 
[^"]?+  anything but a double quote 
([\t])?+ capture all the tabs 
[^"]?+  anything but a double quote 
\"{1}  a double quote 

Meine Logik ist fehlerhaft! Ich brauche Ihre Hilfe bei der Gruppierung der Tab-Zeichen.

Antwort

4

Spiel die doppelten Anführungszeichen Strings mit einem bloßen "[^"]+" regex (wenn es keine Escape-Sequenzen sind zu berücksichtigen) und die Registerkarten innerhalb der ersetzen nur in einem Spiel Auswerter Spiele:

var str = "A tab\there \"inside\ta\tdouble-quoted\tsubstring\" some\there"; 
var pattern = "\"[^\"]+\""; // A pattern to match a double quoted substring with no escape sequences 
var result = Regex.Replace(str, pattern, m => 
     m.Value.Replace("\t", "-")); // Replace the tabs inside double quotes with - 
Console.WriteLine(result); 
// => A tab here "inside-a-double-quoted-substring" some here 

Siehe C# demo

+1

Perfekt und viel einfacher als das, was ich versuchte! Vielen Dank! –

-1

können Sie verwenden:

\"[^\"]*\" 

beantwortet ursprünglich here

Verwandte Themen