R正则表达式由@ nickname,stringr或grep提及

时间:2015-06-28 23:29:09

标签: regex r

我无法让这个regexR中工作。我有一个字符串,其中包含许多以@字符为前缀的昵称,我希望获得所有这些昵称的列表。

我的正则表达式@[a-zA-Z0-9-]+仅匹配第一次出现。

此代码均无效:

library(stringr)    
str_extract("nowy commit, nowa przygoda @oski @data2 @pankote testujemy kod @oski2", '@[a-zA-Z0-9-]+')
[1] "@oski"

grep(pattern = '@[a-zA-Z0-9-]+', x = "nowy commit, nowa przygoda @oski @data2 @pankote testujemy kod @oski2", value = T)
[1] "nowy commit, nowa przygoda @oski @data2 @pankote testujemy kod @oski2"

我想得到结果:

[1] "@oski"
[2] "@data2"
[3] "@pankote"
[4] "@oski2"

谢谢!

2 个答案:

答案 0 :(得分:4)

您也可以考虑使用qdapRegex包:

library(qdapRegex)
x <- 'nowy commit, nowa przygoda @oski @data2 @pankote testujemy kod @oski2'
rm_tag(x, extract=TRUE)[[1]]
# [1] "@oski"    "@data2"   "@pankote" "@oski2"

答案 1 :(得分:2)

使用stringi

> s <- "nowy commit, nowa przygoda @oski @data2 @pankote testujemy kod @oski2"
> stringi::stri_extract_all_regex(s, "@[a-zA-Z0-9-]+")
[[1]]
[1] "@oski"    "@data2"   "@pankote" "@oski2"

如果您想要矩阵而不是列表,则可以传递simplify=TRUE