Einen String nach Leerzeichen aufteilen, außer wenn er in Anführungszeichen steht

8

Ich habe versucht, eine durch Leerzeichen getrennte Zeichenfolge in R für einige Zeit mit doppelten Anführungszeichen zu teilen, aber ohne Erfolg. Ein Beispiel für eine Zeichenfolge ist wie folgt:

Regen Schneefall "Kanalspeicher" "Rivulet Speicher"

Es ist wichtig für uns, denn dies sind Spaltenüberschriften, die mit den nachfolgenden Daten übereinstimmen müssen. Es gibt andere Vorschläge auf dieser Seite, wie man das macht, aber sie scheinen nicht mit R zu arbeiten. Ein Beispiel:

Regex zum Aufteilen einer Zeichenfolge mit Leerzeichen, wenn sie nicht von einfachen oder doppelten Anführungszeichen umgeben ist

Hier ist ein Code, den ich versucht habe:

%Vor%

Was ich möchte ist

%Vor%

aber was ich bekomme ist:

%Vor%

Der Vektor hat die richtige Länge (was ermutigend ist), aber natürlich sind die Strings leer oder enthalten ein einzelnes Leerzeichen. Irgendwelche Vorschläge?

Vielen Dank im Voraus!

    
downtowater 29.11.2012, 14:31
quelle

3 Antworten

15

scan wird dies für Sie tun

%Vor%     
Matthew Plourde 29.11.2012, 14:54
quelle
5

Wie mplourde sagte, benutze scan . Das ist bei weitem die sauberste Lösung (es sei denn, Sie möchten \" behalten, das ist ...)

Wenn Sie Regexes dazu verwenden wollen (oder etwas, das nicht so einfach von scan gelöst wird), dann sehen Sie es immer noch falsch an. Deine Regex gibt zurück, was du willst. Wenn du das also in deinem strsplit verwendest, wird alles abgeschnitten, was du behalten willst.

In diesen Szenarien sollten Sie sich die Funktion gregexp ansehen, die die Startpositionen Ihrer Matches zurückgibt und die Länge des Matches als Attribut hinzufügt. Das Ergebnis davon kann wie folgt an die Funktion regmatches() übergeben werden:

%Vor%

Aber wenn Sie nur den Zeichenvektor benötigen, wie die Lösung von mplourde zurückkehrt, gehen Sie dafür. Und das ist wahrscheinlich das, wonach Sie suchen.

    
Joris Meys 29.11.2012 15:09
quelle
1

Sie können strapply aus dem Paket gsubfn verwenden. In strapply können Sie eine übereinstimmende Zeichenfolge anstelle einer Teilungszeichenfolge definieren.

%Vor%     
Wojciech Sobala 29.11.2012 21:17
quelle

Tags und Links