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.
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 ...
Sie können \E
(Groß- / Kleinschreibung beenden) anstelle von \L
(Kleinbuchstaben beginnen) verwenden, je nachdem, welche Regeln Sie befolgen möchten, z. B .:
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
Aber Sie müssen vielleicht etwas besser mit Apostrophen umgehen
%Vor%Eine schnelle Suche nach SO gefunden Ссылка
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: