正则表达式为Perl和R-lang中的已知开始和结束字符

时间:2015-08-06 21:52:54

标签: regex r perl stringr

我希望在用户名中匹配foo的提及。我需要能够匹配以' @'开头的文字字符串。并包含“foo”字样。在该用户名内的任何位置,以空格或语法结尾。

我需要能够匹配:

example1:@anycharacterhere_foo,其他任何内容

example2:@foo_anymorecharacters here

我希望像这样使用字符串库:

str_extract_all(x, perl("?<=@"))

我不明白的是match all功能

2 个答案:

答案 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"