Ich habe folgende Daten:
%Vor%Ich möchte einen neuen Vektor erstellen, der nur den Text vor dem ersten ":" in den Fällen enthält, in denen ein ":" vorhanden ist, und das ganze Wort, wenn ":" nicht vorhanden ist.
Ich habe versucht zu verwenden:
%Vor%aber es funktioniert nicht in den Fällen, in denen es kein ":"
gibtIch weiß, dass diese Frage sehr ähnlich zu: schneidet die Zeichenfolge von einem bestimmten Zeichen in R ab , die Folgendes verwendete:
%Vor%Aber ich bin mit regulären Ausdrücken nicht sehr vertraut und habe darum gekämpft, dieses Beispiel umzukehren, um nur den Anfang der Zeichenfolge beizubehalten.
Sie können dies mit einem einfachen Regex lösen:
%Vor%Wie die Regex funktioniert:
"(.*?):.*"
Suchen Sie nach einer wiederholten Menge von beliebigen Zeichen .*
, aber ändern Sie sie mit ?
, um nicht gierig zu sein. Dies sollte gefolgt von einem Doppelpunkt und dann jedem Zeichen (wiederholt) "\1"
Das zu verstehende Bit ist, dass jede Regex-Übereinstimmung standardmäßig gierig ist. Wenn die erste Musterübereinstimmung so geändert wird, dass sie nicht gierig ist, kann sie nicht den Doppelpunkt enthalten, da das erste Zeichen hinter den Klammern ein Doppelpunkt ist. Die Regex nach dem Doppelpunkt ist wieder auf den Standard, d. H. Gierig.
Ein anderer Ansatz besteht darin, nach dem ersten ":" zu suchen und es und alles danach durch nichts zu ersetzen:
%Vor%Wenn kein ":" gefunden wird, wird nichts ersetzt und Sie erhalten die gesamte ursprüngliche Zeichenfolge. Wenn es ein ":" gibt, dann wird das erste mit allem nachher abgeglichen, dieses wird dann durch nichts ("") ersetzt, was es löscht und alles bis zu diesem ersten Doppelpunkt zurücklässt.
Entschuldigung, dass Sie das als Antwort hinzufügen. Als Antwort auf die Zeiten:
%Vor%Die Regex sind ungefähr äquivalent, die Strsplit dauert etwas länger