我需要提取" join"之后出现的所有单个单词。 R中以下字符串中的单词。
db<- c("select *
FROM a
left join bd on bd.id=a.id
left join ca on ca.id=a.id
left join dc on dc.id=a.id
where a.names != NULL")
我的结果应该是 &#34; BD&#34; &#34; CA&#34; &#34; DC&#34;
上述查询是否有最佳方法。
答案 0 :(得分:0)
使用stringr::str_match_all(.)
将字符串与正则表达式匹配。您可以使用称为“捕获组”的正则表达式的功能。这意味着,您可以使用(
和)
对正则表达式的部分内容进行分组。然后他们的内容会在结果中单独显示:
library(stringr)
res <- str_match_all(db, "join ([a-z]+)")
res
[[1]]
[,1] [,2]
[1,] "join bd" "bd"
[2,] "join ca" "ca"
[3,] "join dc" "dc"
您会看到结果是一个元素的列表([[1]]
输出部分可以看到,或者您使用str(res)
)。如果您提供的是字符串向量而不是仅提供一个字符串,则此列表将包含更多元素。在每个列表元素中,都有一个字符串矩阵。矩阵的每一行是正则表达式匹配的输入字符串的一个位置。矩阵的每列是正则表达式的捕获组(...)
之一。第一列始终是整个匹配。因此,第二列包含您正在寻找的内容。
正如评论中所述,请查看R for Data Science > Strings和stringr documentation > Regular expressions以了解该主题。