解释R包```stringr```中```str_match_all```的行为

时间:2016-07-08 19:38:32

标签: regex r stringr

st = list("amber johnson", "anhar link ari")
t = stringr::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"

为什么结果重复如此?

1 个答案:

答案 0 :(得分:3)

如果您查看?str_match_all值,则会显示:

  

对于str_match,一个字符矩阵。第一列是完全匹配,   然后是每个捕获组的一列。对于str_match_all,a   字符矩阵列表。

由于模式包含捕获组,因此结果包含两列,一列用于捕获组的完全匹配。如果您不想要重复列,可以从模式中删除组括号:

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

给出了:

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