Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R regex匹配由@昵称、stringr或grep提及_Regex_R - Fatal编程技术网

R regex匹配由@昵称、stringr或grep提及

R regex匹配由@昵称、stringr或grep提及,regex,r,Regex,R,我无法让这个regex在R中工作。我有一个字符串,它由许多昵称组成,前缀是@char,我想得到所有昵称的列表 我的正则表达式只与第一次出现的匹配 以下代码均无效: 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-]+'

我无法让这个
regex
R
中工作。我有一个字符串,它由许多昵称组成,前缀是
@
char,我想得到所有昵称的列表

我的正则表达式只与第一次出现的匹配

以下代码均无效:

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"
谢谢

使用:

>s stringi::stri_extract_all_regex(s,“@[a-zA-Z0-9-]+”)
[[1]]
[1] “@oski”“@data2”“@pankote”“@oski2”

如果你想要矩阵而不是列表,你可以通过<代码> Simult= Trime< /Cord>。

< p>你也可以考虑使用这个包:

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

x谢谢,它救了我的命:)
str_extract_all(“nowy commit,nowa przygoda@oski@data2@pankote testujemy kod@oski2”,“@[a-zA-Z0-9-]+”)[[1]]]
Base R version
regmatches(txt,gregexpr(@[a-zA-Z0-9-]+”,txt))
grep
不返回子字符串,它只返回字符串向量中包含匹配项的字符串。或者
grep('@',strsplit(s',)[[1]],value=TRUE)
其中
s
是您的字符串。我决定将其标记为已接受,因为此包完全处理查找标记的问题。在我的推理中,SO用户的投票也是一个因素。谢谢。经过检查,我认为这个包裹的正则表达式并不完美。例如,在这句话中,我得到了很多假阳性:“我们不想检查是否也有值,而不仅仅是键吗?`@options[:credential1]。present?`“我可以继续使用这个包,但要使用我的自定义正则表达式。它应该提取
@options
还是不提取?不应该,但它提取,在GitHub标记中,如果它后面没有一个whitechar,那么它就不是一个有效的昵称,而且它被`包围,它代表一个代码。我将把正则表达式修改为除刻痕和dissalow`around后面的空格之外。您可以执行
rm_标记(x,extract=TRUE,pattern='@[a-zA-Z0-9-]+(?=\\s |$)[[1]]
library(qdapRegex)
x <- 'nowy commit, nowa przygoda @oski @data2 @pankote testujemy kod @oski2'
rm_tag(x, extract=TRUE)[[1]]
# [1] "@oski"    "@data2"   "@pankote" "@oski2"