Schnappen Sie sich von Anfang bis zum ersten Auftreten von Zeichen mit gsub

7

Ich habe die folgende Regex, dass ich alles vom Anfang des Satzes bis zum ersten ## greifen möchte. Ich könnte strsplit verwenden, um diese Aufgabe zu demonstrieren, bevorzuge aber eine gsub Lösung. Wenn gusub nicht das richtige Werkzeug ist (ich denke es ist aber), würde ich eine Basislösung bevorzugen, weil ich die grundlegenden Regex-Tools lernen möchte.

%Vor%     
Tyler Rinker 28.11.2012, 15:47
quelle

6 Antworten

13

Fügen Sie einfach ein Zeichen hinzu, indem Sie nach dem ersten Quantifizierer ein ? setzen, um es "nicht gierig" zu machen:

%Vor%

Hier ist die relevante Dokumentation von ?regex

  

Standardmäßig ist die Wiederholung gierig, also die maximal mögliche Anzahl von   Wiederholungen wird verwendet. Dies kann durch Anhängen auf "minimal" geändert werden   "?" zum Quantifizierer.

    
Josh O'Brien 28.11.2012, 15:56
quelle
4

Ich würde sagen:

%Vor%

Entfernt alles einschließlich und nach dem ersten Auftreten von ## .

    
Sacha Epskamp 28.11.2012 15:53
quelle
3

In diesem Fall würde ich zur Umkehrung sagen, d. h., ersetze alles, was auf # folgt, mit einer leeren Zeichenkette:

%Vor%

Sie können aber auch den nicht-gierigen Modifikator ? verwenden, damit Ihre Regex wie von Ihnen vorgeschlagen funktioniert:

%Vor%     
Andrie 28.11.2012 15:54
quelle
1

Versuchen Sie dies als Ihre Regex

%Vor%

beginnt am Anfang des Strings und stimmt mit keinem% # bis zum ersten #

überein     
garyh 28.11.2012 15:50
quelle
1

Es gibt bereits einige einfachere Antworten, aber da Sie in Ihrer Frage angegeben haben, dass Sie gerne die Regex-Unterstützung in Base R kennenlernen möchten, verwenden Sie die positive Lookahead-Assertion (?=#) und die nicht-gierige Option (?U) .

%Vor%     
Matthew Plourde 28.11.2012 16:02
quelle
1

Hier ist ein anderer Ansatz, der mehr String-Tools anstelle eines komplizierteren regulären Ausdrucks verwendet. Es findet zuerst den Ort des ersten ## und extrahiert dann den Teilstring bis zu diesem Punkt:

%Vor%

Im Allgemeinen glaube ich, dass diese Art von Schritt-für-Schritt-Ansatz wartungsfreundlicher ist als komplexe reguläre Ausdrücke.

    
hadley 28.11.2012 16:48
quelle

Tags und Links