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.
Fügen Sie einfach ein Zeichen hinzu, indem Sie nach dem ersten Quantifizierer ein ?
setzen, um es "nicht gierig" zu machen:
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.
Ich würde sagen:
%Vor% Entfernt alles einschließlich und nach dem ersten Auftreten von ##
.
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)
.
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.