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

Regex for known start and end characters in Perl and R-lang

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

我需要能够匹配:

示例 1:@anycharacterhere_foo,此处还有其他内容

示例 2:@foo_anymorecharacters 这里

我希望像这样使用 stringr 库:

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

没看懂的是match all函数

假设您的用户名没有特殊字符:

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*")

您需要查找前面或后面的 "zero or more" 个单词字符:

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"