我希望在用户名中匹配foo的提及。我需要能够匹配以' @'开头的文字字符串。并包含“foo”字样。在该用户名内的任何位置,以空格或语法结尾。
我需要能够匹配:
example1:@anycharacterhere_foo,其他任何内容
example2:@foo_anymorecharacters here
我希望像这样使用字符串库:
str_extract_all(x, perl("?<=@"))
我不明白的是match all
功能
答案 0 :(得分:2)
假设您的用户名没有特殊字符:
x <- "@anycharacterhere_foo, anything else here"
username <- str_extract_all(x, "\\w*(foo)\\w*")
会产生一个包含您用户名的字符串。这将在剩余的字符串中获取额外的foos
,但您可以使用str_extract
而不是全部来解决此问题。我不确定你是否真的需要字符串中的所有foo,或者只是你的示例数据中的用户名。您也可以通过包含@来限制所有匹配,因此:
username <- str_extract_all(x, "\\@\\w*(foo)\\w*")
答案 1 :(得分:2)
你需要寻找&#34;零或更多&#34;前面或后面的单词字符:
x <- '@anycharacterhere_foo @foo_anymorecharacters here anything else here'
str_extract_all(x, '@\\w*foo\\w*')[[1]]
# [1] "@anycharacterhere_foo" "@foo_anymorecharacters"
如果您不想包含标记:
str_extract_all(x, '(?<=@)\\w*foo\\w*')[[1]]
# [1] "anycharacterhere_foo" "foo_anymorecharacters"
您还可以使用 qdapRegex 包中的rm_tag
:
library(qdapRegex)
rm_tag(x, extract=TRUE)[[1]]
# [1] "@anycharacterhere_foo" "@foo_anymorecharacters"