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 versionregmatches(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"