Ich habe eine Reihe von Strings, die Dateinamen sind. Ich möchte alle Zeichen nach dem # Symbol aber vor der Dateiendung extrahieren. Einer der Dateinamen lautet beispielsweise:
%Vor% Ich möchte die Zeichenfolge you
Hier ist mein Code:
%Vor% Ich habe online gelesen, dass grep
den Index zurückgeben soll, wo der erste Parameter auftritt (in diesem Fall das Symbol #). Also, ich habe erwartet, dass das oben genannte funktioniert, aber das tut es nicht.
Oder wie würde ich einen regulären Ausdruck verwenden, um diese Zeichenfolge zu extrahieren? Was passiert auch, wenn die Zeichenfolge kein # -Symbol hat? Würde die Funktion einen speziellen Wert wie -1 zurückgeben?
Hier ist eine One-Liner-Lösung
%Vor%Ausgabe:
%Vor% Um den Code zu erklären, vergleicht er alles bis #
und extrahiert dann alle Wort -Zeichen bis .
, so dass die endgültige Ausgabe die dazwischenliegende Zeichenkette ist, die du bist suchen.
Bearbeiten :
Die obige Lösung stimmt den Dateinamen bis zur letzten .
überein, d. h. dem Dateinamen dürfen mehrere Punkte zugewiesen werden. Wenn Sie den Namen bis zum ersten .
extrahieren möchten, können Sie stattdessen den Regex .*\#(\w*)\..*
verwenden.
strapplyc Um das Wort unmittelbar nach #
zu extrahieren, versuchen Sie es mit strapplyc im Paket gsubfn :
oder das ermöglicht, dass der Dateiname Punkte enthält:
%Vor%file_path_sans_ext Ein weiterer dateinamenorientierter Ansatz mit dem tools-Paket (das mit R gebündelt ist, sodass keine zusätzlichen Pakete installiert werden müssen) ist wie folgt:
%Vor%HINZUGEFÜGT: zusätzliche Lösungen
Sie können gsub
verwenden. Vorteil davon ist, dass Sie mehrere .
s bis zum letzten anpassen können.
Diese Lösung ist einfach für diejenigen, die keine Regex lernen möchten, aber nicht mit der Absicht des Posters übereinstimmen (mehr für zukünftige Suchende). Dieser Ansatz deckt den Fall ab, in dem Sie keine #
haben, da die Funktion character(0)
zurückgibt.
Erträge:
%Vor%Obwohl ich denke, dass es einen Fehler im Label gibt, aber nicht die tatsächlichen Rückgabewerte.
BEARBEITEN: Dies ist in der Tat ein Fehler, der in der Entwicklungsversion behoben wurde. Ausgabe mit devel. Ver .:
%Vor%