Abschneiden des Endes einer Zeichenkette in R nach einem Zeichen, das null oder mehrmals vorhanden sein kann

8

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 ":"

gibt

Ich 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.

    
Tony M. 04.06.2012, 15:08
quelle

5 Antworten

15

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)
  • sein
  • Ersetzen Sie die gesamte Zeichenfolge durch das in den Klammern gefundene Bit - "\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.

    
Andrie 04.06.2012, 15:21
quelle
9

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.

    
Greg Snow 04.06.2012 15:44
quelle
3

Funktioniert das (vorausgesetzt, Ihre Daten befinden sich in einem Zeichenvektor):

%Vor%     
joran 04.06.2012 15:14
quelle
3

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

    
shhhhimhuntingrabbits 04.06.2012 15:52
quelle
1

in diesem Fall

%Vor%

kann für Sie arbeiten

    
shhhhimhuntingrabbits 04.06.2012 15:18
quelle

Tags und Links