Wie konvertiert man einen Stringsvektor in den Titel [duplicate]

7

Ich habe einen Vektor von Strings in Kleinbuchstaben. Ich möchte sie in Titel ändern, was bedeutet, dass der erste Buchstabe jedes Wortes großgeschrieben wird. Ich habe es mit einer Doppelschleife geschafft, aber ich hoffe, dass es einen effizienteren und eleganteren Weg gibt, vielleicht einen Einzeiler mit gsub und eine Regex.

Hier sind einige Beispieldaten, zusammen mit der Doppelschleife, die funktioniert, gefolgt von anderen Dingen, die ich versucht habe, die nicht funktionierten.

%Vor%

Das hat funktioniert, aber es scheint ungewöhnlich kompliziert. Ich habe darauf nur zurückgegriffen, nachdem ich erfolglos mit einfacheren Ansätzen experimentiert hatte. Hier sind einige der Dinge, die ich versucht habe, zusammen mit der Ausgabe:

%Vor%

Der Regex erfasst die korrekten Positionen in jeder Zeichenfolge, wie durch einen Aufruf von gregexpr angezeigt, aber die Ersetzungszeichenfolge funktioniert eindeutig nicht wie gewünscht.

Wenn Sie es nicht bereits wissen, bin ich noch relativ neu in Regexes und würde mich über Hilfe freuen, wie der Ersatz funktioniert. Ich würde auch gerne lernen, wie man die Regex so strukturiert, dass man einen Brief nach einem Apostroph nicht erfasst, da ich den Fall dieser Buchstaben nicht ändern möchte.

    
eipi10 03.04.2013, 00:11
quelle

4 Antworten

18

Das Hauptproblem ist, dass du perl=TRUE verpasst (und deine Regex ist ein bisschen falsch, obwohl das ein Ergebnis des Umherstreifens sein könnte, um zu versuchen, das erste Problem zu beheben).

Die Verwendung von [:lower:] anstelle von [a-z] ist etwas sicherer für den Fall, dass Ihr Code in etwas seltsam ausgeführt wird ( Entschuldigung, Esten ) Gebietsschema wo z nicht der letzte Buchstabe des Alphabets ist ...

%Vor%

Sie können \E (Groß- / Kleinschreibung beenden) anstelle von \L (Kleinbuchstaben beginnen) verwenden, je nachdem, welche Regeln Sie befolgen möchten, z. B .:

%Vor%     
Ben Bolker 03.04.2013, 00:19
quelle
7

Ohne regex zu verwenden, hat die Hilfeseite für tolower zwei Beispielfunktionen, die dies tun.

Die robustere Version ist

%Vor%

Damit Ihr regex -Ansatz (fast) funktioniert, müssen Sie 'perl = TRUE) setzen

%Vor%

Aber Sie müssen vielleicht etwas besser mit Apostrophen umgehen

%Vor%

Eine schnelle Suche nach SO gefunden Ссылка

    
mnel 03.04.2013 00:15
quelle
6

Hier gibt es bereits ausgezeichnete Antworten. Hier ist eine, die eine Komfortfunktion aus dem Berichtspaket verwendet:

%Vor%

Obwohl es einen nicht kapitalisiert, da es keinen Sinn ergibt, dies für meine Zwecke zu tun.

Update Ich verwalte das Paket qdapRegex mit der Funktion TC (Titel), die den wahren Titel case:

ausführt %Vor%     
Tyler Rinker 03.04.2013 00:27
quelle
4

Ich werde einen mehr in den Mix zum Spaß werfen:

%Vor%     
Ricardo Saporta 03.04.2013 04:00
quelle

Tags und Links