2016-07-08 10 views
-3
st = list("amber johnson", "anhar link ari") 
t = str_match_all(st, "(\\ba[a-z]+\\b)") 
str(t) 
# List of 2 
# $ : chr [1, 1:2] "amber" "amber" 
# $ : chr [1:2, 1:2] "anhar" "ari" "anhar" "ari" 

Warum werden die Ergebnisse so wiederholt?Erklären Sie das Verhalten von `` `str_match_all``` in R-Paket` `` stringr```

+0

diesen Lauf funktioniert ohne Fehler? 'str_match_all' akzeptiert einen String als erstes Argument ... wenn Zeile 2 zu 'Error: String muss ein atomarer Vektor sein' – copeg

+0

@copeg läuft es ohne Fehler für mich. – tnabdb

+0

@copeg - Möglicherweise verwenden Sie eine alte Version von * stringr *. Funktioniert für mich in der Version 1.0.0 –

Antwort

3

Wenn Sie auf ?str_match_all Wert aussehen, heißt es:

For str_match, a character matrix. First column is the complete match, followed by one column for each capture group. For str_match_all, a list of character matrices.

Da Sie Muster mit einer Capture-Gruppe enthält, ist das Ergebnis zwei Spalten enthält, eine für die vollständige Übereinstimmung einer für die Capture-Gruppe. Wenn Sie die wiederholte Spalte nicht wollen, können Sie die Gruppe Klammern aus dem Muster entfernen:

st = list("amber johnson", "anhar link ari") 
t = str_match_all(st, "\\ba[a-z]+\\b") 
str(t) 

Welche gibt:

# List of 2 
# $ : chr [1, 1] "amber" 
# $ : chr [1:2, 1] "anhar" "ari" 
+3

Wenn es keine einfangenden Gruppen gibt, gibt es keine Notwendigkeit in 'str_match_all',' str_extract_all' ist genug, oder sogar 'gregexpr' mit' regmatches'. –

+0

@Psidom, Ah ich sehe ... Ich habe die Hilfe-Seite gelesen, aber nicht verstanden, dass das Ergebnis eine komplette Übereinstimmung und Capture-Gruppe (n) enthält. Vielen Dank. – tnabdb