Matching mehrere Muster
Will ich sehen, wenn "001"
oder "100"
oder "000"
tritt in eine Zeichenfolge von 4 Zeichen 0
und 1
. Zum Beispiel, ein 4-Zeichen-string könnte sein, wie "1100"
oder "0010"
oder "1001"
oder "1111"
. Wie muss ich passen viele strings in einem string mit einem einzigen Befehl?
Weiß ich grep verwendet werden könnte, pattern-matching, aber mit grep, kann ich nur eine saite zu einem Zeitpunkt. Ich möchte wissen, ob mehrere Zeichenketten können verwendet werden, mit einigen anderen Befehl oder mit grep selbst.
InformationsquelleAutor der Frage Narayani | 2011-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie können. Die
|
imgrep
Muster hat die gleiche Bedeutung wieor
. So können Sie testen, für Ihre Muster durch mit"001|100|000"
als Ihr Muster. Gleichzeitiggrep
ist vektorisiert, so dass all dies kann in einem Schritt:Dieser gibt einen index zurück, was Ihre Vektoren enthalten die passenden Muster (in diesem Fall die ersten drei.)
Manchmal ist es bequemer zu haben, einen logischen Vektor, der sagt Ihnen, welche Elemente in Ihrem Vektor angepasst wurden. Dann können Sie
grepl
:Sehen
?regex
für die Hilfe über reguläre Ausdrücke in R.Edit:
Um zu vermeiden das Muster manuell können wir verwenden
paste
:InformationsquelleAutor der Antwort Andrie
Hier ist eine Lösung, mit
stringr
PaketInformationsquelleAutor der Antwort Ramnath
Das argument-e verwenden, um zusätzliche Muster:
InformationsquelleAutor der Antwort Patrick Dignan
Können Sie auch die
%like%
Betreiber vondata.table
Bibliothek.InformationsquelleAutor der Antwort rafa.pereira
Wenn Sie möchten, logische Vektor, dann sollten Sie prüfen
stri_detect
Funktion vonstringi
Paket. In Ihrem Fall ist das Muster regex zu verwenden, so dieses:Und einige benchmarks:
InformationsquelleAutor der Antwort bartektartanus
Sorry für diese eine zusätzliche Antwort, aber es sind zu viele Zeilen für einen Kommentar.
Ich wollte nur daran erinnern, dass die Anzahl der Elemente, die eingefügt werden können, die zusammen über
paste(..., collapse = "|")
als einzigen passenden Muster ist begrenzt - siehe unten. Vielleicht jemand kann sagen, wo genau die Grenze ist? Zugegeben, die Zahl ist vielleicht nicht realistisch, sondern je nach der Aufgabe, die durchgeführt werden es sollte nicht ganz ausgeschlossen werden von unserer überlegungen.Für eine sehr große Anzahl von Elementen, ist eine Schleife erforderlich wäre, zu prüfen jedes Element des Musters.
InformationsquelleAutor der Antwort Manuel Bickel